Webサーバーを新マシンに移行するついでに、MovableType4のオープンソース版に移行することにしました。そして、同時にかねてからの課題だったUTF-8化に挑戦(BlogWriteIIから投稿した時に「~」が化けなくなるように)。
様々なページを参考にしましたが、それぞれ微妙に事情が違っていて苦労しました。基本的には、
- MTはEUC-JPで構築していた
- MySQLのテーブルはlatin1だった
- バックエンドDBはMySQL
という状況です。
結果としては効いたのは、迷惑コメントの消去です。これでMySQLのダンプサイズが劇的に減っただけでなく、奇妙な文字化けによるインポートエラーを回避することができました。MTの管理画面からは見えにくいですが、迷惑コメントタブの方に万単位に溜まってたのでしたorz。
MT管理画面で一通り不要なデータを削除した後、ターミナルから、
mysqldump –default-character-set=ujis -u user -p dbname > mtdb.sql
としました(もしかすると–default-character-set=binaryだったかも)。赤字部分は環境に応じて修正すべし。次に、これをUTF-8にコンバートし、ファイル内部のlatin1という文字列をutf8に置換します。
nkf -w mtdb.sql > mtdb_utf.sql
perl -pi -e ‘s/latin1/utf8/’ mtdb_utf.mysql
ついでに、今までの化けた「~」を修正するため、emacsで、波ダッシュを「~」に置換しました。これで下準備は完了です。
次に、新サーバー側の準備として、/etc/my.cnfの、[mysqld] 、[mysql]、[mysqldump]の項に、
default-character-set=utf8
を追記。[mysqld]には更に、
skip-character-set-client-handshake
も追記。この辺はどれが必須かは不明です。 これで、MySQLの作るDBのデフォルト文字コードがUTFになるので、新しくMovableType用DBを作成し、先ほどのダンプを流し込みます。
mysqladmin create dbname
mysql dbname < mtdb_utf.sql
ここの流し込みで散々エラーに悩まされましたが、迷惑コメントのデータを一層し、nkfでUTF-8に変換したところ上手くいきました(lvではダメでした)。
あとは、新規インストールしたmT4のmt-config.cgiでPublishCharsetをutf-8にし、mt.cgiにアクセスしたら自動的にDBの変換が実行され、管理画面で文字化けしてなければOKです。再構築すればUTF-8でページが生成されるはずです。