Преобразование latin1_swedish_ci в utf8 с помощью PHP - PullRequest
10 голосов
/ 11 июля 2011

У меня есть база данных, заполненная такими значениями, как ♥•â—♥ Dhaka ♥•â—♥ (что должно быть ♥•●♥ Dhaka ♥•●♥), так как я не указывал параметры сортировки при создании базы данных.
Теперь я хочу это исправить. Я не могу получить данные снова, откуда я их получил. Поэтому я подумал, можно ли получить данные в php-скрипте и преобразовать их в правильные символы.
Я изменил параметры сортировки базы данных и полей на utf8_general_ci ..

Ответы [ 2 ]

14 голосов
/ 11 июля 2011

Параметры сортировки НЕ совпадают с набором символов. Сортировка используется только для сортировки и сравнения текста (поэтому здесь есть языковой термин). Фактический набор символов может быть другим.

Наиболее распространенная ошибка не в базе данных, а в соединении между PHP и MySQL. Кодировка по умолчанию для соединения обычно ISO-8859-1. Вам нужно изменить это первым делом после подключения, используя либо SQL-запрос SET NAMES 'utf-8';, либо функцию mysql_set_charset .

Также проверьте набор символов ваших таблиц. Это также может быть неправильно, если вы не указали UTF-8 для начала (опять же: это не то же самое, что сортировка). Но обязательно сделайте резервную копию, прежде чем что-то менять здесь. MySQL попытается преобразовать кодировку из предыдущей, поэтому вам может потребоваться перезагрузить данные из резервной копии, если вы действительно сохранили данные UTF-8 в таблицах ISO-8859-1.

3 голосов
/ 11 июля 2011

Я бы посмотрел в mb_detect_encoding () и mb_convert_encoding () и выяснил, могут ли они вам помочь.

...