Только сегодня я понял, что мне не хватает этого в моих скриптах 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 á (á)ţă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.
Мне действительно нужна помощь здесь!Спасибо.