2011-06-04

Как изменить кодировку базы данных на UTF-8

Встала задача сконвертировать базу данных из latin1 в utf8. В интернете есть множестово рецептов как это сделать. Наиболее часто встречается PHP скрипт, который генерирует последовательность из ALTER TABLE комманд.

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

Делать эти преобразования вручную на живой базе довольно стрёмно - данные могут измениться между шагами, поэтому я создал вот такой скрипт для выполнения данной задачи:

#!/bin/sh

DBNAME="yourdbname"
DBUSER="yourdbuser"
DBPASS="yourdbpassword"

mysqldump -u$DBUSER -p$DBPASS $DBNAME > $DBNAME.sql
sed 's/DEFAULT CHARSET=latin1//' $DBNAME.sql > ${DBNAME}_converted.sql
sed 's/CHARACTER SET latin1//' ${DBNAME}_converted.sql > ${DBNAME}_converted1.sql

mysql -u$DBUSER -p$DBPASS $DBNAME <<EOFMYSQL
ALTER DATABASE $DBNAME DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
EOFMYSQL

mysql -u$DBUSER -p$DBPASS $DBNAME < ${DBNAME}_converted1.sql

Исходная база была в latin1, если у вас другая кодировка, скрипт легко подправить.

 

комментарии:

 

Для того чтобы каждый раз не представляться можно войти как зарегистрированный пользователь.

Имя*

разрешены только теги br, font, span, p, strong, u, p, blockquote, a, div, img - остальные будут безжалостно удаляться