Convert MySQL encoding

From Help system
Jump to: navigation, search

Ситуация: у нас есть сервер, на котором стоит mysql 4.1 +, и все базы в latin1

Требуется перекодировать все базы в cp1251 или utf8

Прежде всего надо сделать обновление до 5 версии mysql. Это не обязательно, но очень желательно. Тестирование выполнения данного howto производилось именно на 5 версии.


Итак, в целом шаги следующие:


cp -r /var/lib/mysql /var/lib/mysql.orig
mysqldump --skip-set-charset --default-character-set=latin1 --compatible=mysql40 --skip-opt --skip-comments --all-databases > /root/backup.sql
sed 's/DEFAULT CHARACTER SET latin1/ /' /root/backup.sql > /root/backup.sql.new
[mysqld]
collation-server=cp1251_general_ci
default-character-set=cp1251
init-connect='SET NAMES cp1251'

[client]
default-character-set=cp1251
mysql --force < /root/backup.sql.new

Если нет - значит или что-то не так сделали, или изначально базы были в другой кодировке и требуется более тщательный анализ и работа.
На этот случай у нас есть бэкап.

rm -rf /var/lib/mysql
mv /var/lib/mysql.orig /var/lib/mysqlи удаление/комментирование строк про collation в /etc/my.cnf

P.S. Апач уже можно включать

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox