Перекодировка из latin1 в utf8

Если вы храните в БД данные в кодировке UTF-8, то наверняка сталкивались с ситуацией, когда по ошибке эти данные записывались в таблицу с кодировкой latin1 по умолчанию. Не смотря на то, что данные выглядят совершенно нечитабельно, это можно легко исправить.

Для извлечения данных из БД используется команда mysqldump. С параметрами по умолчанию она извлечет данные из БД и переедет их в текущую кодировку нашей локали. Если в локали кодировка UTF-8, тогда данные испортятся ещё сильнее: они станут закодированными в UTF-8 дважды. Поэтому необходимо задать некоторые параметры в команде экспорта:

mysqldump --default-character-set=latin1 --skip-set-charset mydatabase mytable > ./mytable.sql

В текущем каталоге будет создан файл mytable.sql с дампом таблицы. Откройте его в текстовом редакторе и найдите код, который создает таблицу:

CREATE TABLE `test` (
  `id` int(10) unsigned NOT NULL,
  `name` char(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Замените latin1 на utf8. Если вы экспортировали несколько таблиц, произведите эту операцию соответствующее число раз. Можно воспользоваться функцией автозамены текстового редактора.

Теперь данные нужно импортировать обратно в БД:

mysql --user=login -p --database=mydatabase < ./mytable.sql

Ссылки