Перевод кодировки с latin1 в UTF-8 в MySQL

При переводе сайта с одного хостинга на другой (ну или при обновлении MySQL) может возникнуть некоторые проблемки с кодировкой. Тоесть вместо всеми любимой кирилицы мы видим одни ????? (вопросительные знаки).

Предлагаю мое решение по устранению этого казуса.
Не забываем о том, что все ниже перечисленные операции производятся от имени суперпользователя (root).
DBNAME — имя вашей базы.

Создание дампа базы
Естественно, мы создадим копию оригинальной базы, а как же иначе.

mysqldump -u root -p --opt --default-character-set=latin1 --skip-set-charset  DBNAME > DBNAME.sql

Удаление и создание
Теперь, потирая руки (можно добавить немного дьявольского смешка) и с криками «шеф, все пропало!!!», удаляем старую базу и создаем новую с поддержкой UTF-8 кодировки.

mysql -u root -p --execute="DROP DATABASE DBNAME;CREATE DATABASE DBNAME CHARACTER SET utf8 COLLATE utf8_general_ci;"

Востановление дампа базы
Теперь важный шаг в вашей жизни — это востановить потертые данные из дампа преобразуя в новую, нужную нам кодировку. Иначе прийдется кричать «БАНЗАЙ!!!», снимать тапки и делать харакири.

mysql -u root --max_allowed_packet=16M -p --default-character-set=utf8 DBNAME < DBNAME.sql

Опция max_allowed_packet - иногда очень важна, а вдруг вы импортируете базу большого размера? В общем если вы при импорте получите ошибку аля "1153 в строке 42: Полученный пакет больше, чем 'max_allowed_packet'" то вам необходимо увеличить размер пакета (это увеличение будет действовать до первого перезапуска демона MySQL).
Для того чтобы не включать постоянно эту опцию можно подкоректировать /etc/my.cnf (или добавить если такая опция отсутствует)

[mysqld]
max_allowed_packet=16M

Вот и все. Просто, быстро и со вкусом.


Оставьте комментарий