MySQLの文字コードを変更する(latin1 -> utf8)
2013年1月25日
かなり前から使ってた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
を実行して解消。
ま、メッセージのままですが・・。