Только сегодня я понял, что мне не хватает этого в моих PHP скриптов:MySQL - Преобразование latin1 символов на столе UTF8 в UTF8
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"');
«Имя» содержимое будет, в этом случае: 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'].'"');
}
Это «UPDATE» s с ожидаемыми символами, за исключением того, что строка получает усечена после символа «A». Я имею в виду, что этот символ и следующие символы не включены в строку.
Кроме того, тестирование с «Iconv()» (который комментировал код) делает то же самое, даже с // ИГНОРИРУЙТЕ и // TRANSLIT
Я также протестировали несколько кодировок, между ISO-8859- 1 и ISO-8859-15.
Мне очень нужна помощь здесь! Спасибо.
WOW вы сохранили мой день!Я никогда не использовал эти функции, которые теперь используются в UPDATE, и это сработало. Большое спасибо! – Nuno
Спасибо за это! Я создал небольшой скрипт php, который перебирает все столбцы в каждой таблице. Сделал трюк :) – wiesson
СПАСИБО БОЛЬШОЙ АБС !!!!! Много связанных вопросов SO, но только в этом есть функция для правильной конвертации в UTF-8 – alds