2008/08/25 (月)

2008-08-25:mysqldump の charset

当サイトをホスティングしているサーバをリプレイスしました(このために京都のデータセンターに出張だった)。
しばらく文字化けに苦しみましたが、現在は復旧しています。

文字化けの理由は、旧サーバが mysql 4.1 で、新サーバが 5.0 なんですが、この際のデータダンプ移行で文字コードにはまる、という

超ありがち

なもの。
mysqldump –all-databases で旧サーバでデータをとったのだけど、–default-character-set で binary が指定できず、ujis でしかダンプがとれなかったのが最初のつまづき。
その後、ダンプファイルを nkf でいろいろほげほげしてから新サーバでインポートして、mysql クライアントでつないだら、中身の日本語が見えたので、いったん安心してしまった。
文字化けが php の方かなと、php.ini の mbstring まわりのセッティングをみたり、Debian の /etc/apache2/conf.d/charset にはまってるのに気づいてなおしたり、とするが、ここの文字化けはなおらず。

結局、DB 内の文字コードがだめだったのが原因。
4.1 からダンプしたときのデータの CREATE TABLE 文に DEFAULT CHARSET がないのが問題でした。
5.0 に入ったデータを再度 mysqldump -default-character-set=binary で出力し、文字コードを utf8 に変えたあと、CREATE TABLE 文の DEFAULT CHARSET=latin1 を sed で DEFAULT CHARSET=utf8 としてからインポートしなおして解決しました。

やっぱり mysql は慣れてなくてつらい。。。

comment