MySQL 文字コードをUTF8に変更する

・DBの文字コードを確認する
文字コードはDBごとに保持している
※character_set_system は MySQL が内部的に使用する文字コードUTF-8で固定。

mysql> SHOW VARIABLES LIKE 'char%';
| character_set_client | latin1 | 
| character_set_connection | latin1 | 
| character_set_database | latin1 | 
| character_set_filesystem | binary | 
| character_set_results | latin1 | 
| character_set_server | latin1 | 
| character_set_system | utf8 | 
| character_sets_dir | /usr/share/mysql/charsets/ | 

・設定ファイルにデフォルトの文字コードを設定する
# vi /etc/mysql/my.cnf

[client]
default-character-set=utf8

[mysqld]
character-set-server=utf8

・リスタート

# /etc/init.d/mysql restart

・既存DBの文字コードを変更する(VARCHAR(255)で収まる場合)

・既存columnをバイナリに変換する
mysql> ALTER TABLE テーブル名 MODIFY フィールド名 BINARY(255);

・バイナリからUTF8に変換する
mysql> ALTER TABLE テーブル名 MODIFY フィールド名 VARCHAR(255) CHARACTER SET utf8;

・character setをUTF8に変更する
mysql> ALTER DATABASE DB名 CHARACTER SET UTF8;

・既存DBの文字コードを変更する(VARCHAR(255)で収まらない場合)

・DBをbinaryでダンプを取る。
# mysqldump --default-character-set=binary -u ユーザ名 DB名 --password=パスワード > ダンプの出力ファイルパス

・ダンプファイルのデータを手作業でUTF8に変換する

・ダンプファイルをUTF8でレストアする
# mysql -u ユーザ名 -p DB名 --default-character-set=UTF8 < ダンプファイル名

・character setをUTF8に変更する
mysql> ALTER DATABASE DB名 CHARACTER SET UTF8;