MySQLの文字コード問題:既に格納されたデータを救うには?

最終的にMySQLにはUTF8で格納するようにしたい。

くまくま:文字化け問題を本気で直すに従って、my.cnfを編集すればよい。問題は、既に格納している奴をどうするか?という点。

とりあえず、既に格納されているデータの文字コードがわかっているならば、吐き出させる。

% mysqldump --defualt-character-set=CHAR_SET -u USER_NAME -p DB_NAME > FILENAME

で出力してみる。

その後、データベースを一度削除し、作りなおせばutf8で統一される。吐き出させたファイルをUTF8にエンコードし、ファイル中に存在する

ENGINE=MyISAM AUTO_INCREMENT=27 DEFAULT CHARSET=CHAR_CODE;

のCHAR_CODEをutf8に直して、格納しなおせばよい。たとえば、CHAR_CODEがlatin1になっている場合は以下のようにする。

% iconv -f EUC-JP -t UTF-8 FILENAME > FILENAME.utf8
% sed -e s/latin1/utf8/ FILENAME.utf8 > FILENAME.nolatin1
% mysql -u USER_NAME -p DBNAME < FILENAME.nolaitn1