読者です 読者をやめる 読者になる 読者になる

いまさらEUCのデータ持ってたのが致命的か

以下、自分にしか役立たないメモっす。つーかちゃんとMySQL知っている人が見たら目を剥くようなひどいbad knowhowなのでしょう。
NucleusEUC文字コードでブログのデータを持っていたが、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 とかをちまちまやる方法もあるようだが、こちらのほうが楽ちんであった。