いまさらEUCのデータ持ってたのが致命的か
以下、自分にしか役立たないメモっす。つーかちゃんとMySQL知っている人が見たら目を剥くようなひどいbad knowhowなのでしょう。
NucleusでEUCの文字コードでブログのデータを持っていたが、MySQLのサーバーを移る必要ができて、ちょっとハマった。バージョンはほぼ同じで5.0.xxだったので、安心していたのだが...
もともとのデータは、文字化けを恐れて
$ mysqldump --all-databases --default-character-set=binary > file
とかしてdumpしたのだが、こうすると中身がEUCでもデータベースのcharsetはlatin1になるのね。
で、これを別のサーバ(すでにMySQLが稼働してたので、3307の別ポートを使ったプロセスを追加で立ち上げた)に吸い上げることにしたのだが、2つ問題が。
- mysqlのクライアントコマンドは、-hのオプションでホストを指定しないとlocalhostとみなして、ポートを指定してもsocketにつなぎに行ってしまう。これであやうく3306で動いているデータベースを破壊するところだった。
- 何も気にせず運用しているMySQLサーバーは、utf8がdefault-character-setなので、そこへlatin1として定義されたテーブルの中身がEUCだとどうにも化ける。
後者については、dumpデータにあるCREATE TABLE文の CHARSET=latin1 の部分を全部 CHARSET=ujis に置換してから読み込むことにした。これについては、いったんデータを読み込んでから、ALTER TABLE, ALTER TABLE xxx COLUMN yyy とかをちまちまやる方法もあるようだが、こちらのほうが楽ちんであった。