MySQL – преобразовать символы latin1 в таблицу UTF8 в UTF8

Только сегодня я понял, что мне не хватает этого в моих PHP-скриптах:

mysql_set_charset('utf8'); 

Все мои таблицы – InnoDB, сортировка «utf8_unicode_ci», и все мои столбцы VARCHAR также «utf8_unicode_ci». У меня есть mb_internal_encoding('UTF-8'); на моих PHP-скриптах, и все мои PHP-файлы закодированы как UTF-8.

Итак, до сих пор, каждый раз, когда я «ВСТАВЯ» что-то с диакритикой, например:

 mysql_query('INSERT INTO `table` SET `name`="Jáuò Iñe"'); 

Содержание 'name' было бы в этом случае: Jáuò Iñe .

Поскольку я исправил кодировку между PHP и MySQL, новые INSERT теперь хранятся правильно. Тем не менее, я хочу исправить все старые строки, которые в настоящий момент «перепутаны». Я уже много пробовал, но он всегда разбивает строки на первый «незаконный» символ. Вот мой текущий код:

 $m = mysql_real_escape_string('¿<?php echo "¬<b>\'PHP &aacute; (á)ţăriîş </b>"; ?> ă-ţi abcdd;//;ñç´พดแทฝใจคçăâξβψδπλξξςαยนñ ;'); mysql_set_charset('utf8'); mysql_query('INSERT INTO `table` SET `name`="'.$m.'"'); mysql_set_charset('latin1'); mysql_query('INSERT INTO `table` SET `name`="'.$m.'"'); mysql_set_charset('utf8'); $result = mysql_iquery('SELECT * FROM `table`'); while ($row = mysql_fetch_assoc($result)) { $message = $row['name']; $message = mb_convert_encoding($message, 'ISO-8859-15', 'UTF-8'); //$message = iconv("UTF-8", "ISO-8859-1//IGNORE", $message); mysql_iquery('UPDATE `table` SET `name`="'.mysql_real_escape_string($message).'" WHERE `a1`="'.$row['a1'].'"'); } 

Он «ОБНОВЛЯЕТ» с ожидаемыми символами, за исключением того, что строка усекается после символа «ă». Я имею в виду, что этот символ и следующие символы не включены в строку.

Кроме того, тестирование с помощью «iconv ()» (которое прокомментировано кодом) делает то же самое, даже с // IGNORE и // TRANSLIT

Я также проверил несколько кодировок между ISO-8859-1 и ISO-8859-15.

Мне действительно нужна помощь здесь! Спасибо.

Из того, что вы описываете, кажется, у вас есть данные UTF-8, которые были первоначально сохранены как Latin-1, а затем неправильно преобразованы в UTF-8. Данные могут быть восстановлены; вам понадобится функция MySQL, например

 convert(cast(convert(name using latin1) as binary) using utf8) 

Возможно, вам может потребоваться опустить внутреннее преобразование, в зависимости от того, как данные были изменены во время преобразования кодировки.

После того, как я обыскал около часа или двух за этот ответ. Мне нужно было перенести старый tt_news db из опечатки в новую версию typo3. Я уже попробовал преобразовать кодировку в файл экспорта и импортировать ее обратно, но не получил ее работу.

Затем я попробовал ответить выше с ABS и начал обновлять таблицу:

 UPDATE tt_news SET title=convert(cast(convert(title using latin1) as binary) using utf8), short=convert(cast(convert(short using latin1) as binary) using utf8), bodytext=convert(cast(convert(bodytext using latin1) as binary) using utf8) WHERE 1 

Вы также можете преобразовать imagecaption, imagealttext, imagetitletext и ключевые слова, если это необходимо. Надеюсь, это поможет кому-то мигрировать tt_news в новую версию typo3.

путь лучше всего использовать соединение буксировка базы данных нормальный

затем используйте этот код, чтобы сделать то, что вам нужно, вы должны сделать свою страницу кодирования utf-8 мета в заголовке cod html (не забывайте об этом)

затем используйте этот код

  $result = mysql_query('SELECT * FROM shops'); while ($row = mysql_fetch_assoc($ $name= iconv("windows-1256", "UTF-8", $row['name']); mysql_query("SET NAMES 'utf8'"); mysql_query("update `shops` SET `name`='".$name."' where ID='$row[ID]' "); }