MySQL Tips: "Migrate MySQL database from latin1 to utf8"

MySQLのcharacter setはlatin1がデフォルトなので、そのままデータベース、テーブルを作った後に国際文字の対応が必要になりUTF8に移行する必要が出てくることがある。


ということで、Migrate MySQL database from latin1 to utf8を参考にUTF8に移行してみた。


本当は既存のデータをdumpしてUTF8に変換して読み込むという作業が必要だが、今回はテストデータなのでとりあえずデータベースをdropして作成しなおすことにした。この方法だと既存データは消えてしまうが手続き的には非常に楽。

1) /etcの下にmy.cnfを作成(/usr/local/mysql/support-filesの下のファイルをコピー)

sudo cp /usr/local/mysql/support-files/my-huge.cnf /etc/my.cnf


2) my.cnfを編集
↑に従って

[mysqld]
character-set-server=utf8
default-collation=utf8_unicode_ci

[client]
default-character-set=utf8

を追加して

$ sudo /usr/local/mysql/support-files/mysql.server restart

で再起動しようとしたら

ERROR! The server quit without updating PID file

と言われてMySQLが起動できなくなった。


どうやら

default-collation=utf8_unicode_ci

が問題っぽいのでとりあえずコイツをコメントアウトしたら起動できるようになった。
MelangesのDevelopment/Deploymentというブログの「2.3.2 設定ファイルの書き換え」を参考に、ついでに↓も追加。

[mysqldump]
default-character-set = utf8

[mysql]
default-character-set = utf8

3) 確認
show variables like "char%";

                                                                                                                                                                • +
Variable_name Value
                                                                                                                                                                • +
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/local/mysql-5.5.9-osx10.6-x86/share/charsets/
                                                                                                                                                                • +

8 rows in set (0.00 sec)


ふむ。OKっぽい。