Учебно-методические материалы для студентов кафедры АСОИУ

Перекодировка баз данных MySQL

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

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

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

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

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

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

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

mysql --user=username -p --database=mydatabase < mydump.sql

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

CC-BY-CA Анатольев А.Г., 26.11.2012