MySQLの文字コードを変更する(latin1 -> utf8)

かなり前から使ってたMySQLの実データがlatin1のままで、アプリ側でutf8にエンコードして出力してたんですが、そろそろutf8にしておこうかと・・。

MySQL


[client]
default-character-set=utf8

[mysqld]
default-character-set = utf8
skip-character-set-client-handshake
collation-server = utf8_general_ci
init-connect = SET NAMES utf8

で、再起動しようとしたら、エラー・・。

[ERROR] /usr/libexec/mysqld: unknown variable 'default-character-set=utf8'

MySQL5.5は、default-character-setが使えなくなったぽいです。

#default-character-set = utf8
character-set-server = utf8

character-set-serverに変更してmysqldを再起動。


データ

とりあえずdumpします。(db名:hoge)

mysqldump -a --default-character-set=latin1 hoge > hoge.sql

で、dumpしたデータをperlで置換。

perl -pi -e 's/latin1/utf8/' hoge.sql

置換したデータを新しいMySQLにぶち込む

mysql hoge < hoge.sql

で、文字コードとは別件ですが、MySQLのバージョンもあげたので、

[ERROR] Missing system table mysql.proxies_priv; please run mysql_upgrade to create it

ってなエラーもでてたので、

mysql_upgrade -u root -p

を実行して解消。
ま、メッセージのままですが・・。