古いXOOPS2.0.x.JPで作られたWebサイトのDBなんかだと MySQL4 で文字コードはujis(EUC-JP)なんてことが結構あります。
そんなDBデータをMySQL5.6でUTF8な環境に移行させようとするとまぁ色々問題でてきてそのままだとインポートできません。
とあるサイトのDBデータを移行するために色々やったことを参考までに書いておきます。
文字コードぐちゃぐちゃ
DBデータに結構文字化けしたデータが入ってることあります^^;
こいつをなんとかしないと、インポートこけちゃうのでまず文字コードをなんとかします。
今回試したのは次の手順
- MySQL4のphpMyAdminでshit-jisでエクスポート
- 秀丸エディタで開く
- 文字コードおかしなところを検知してジャンプできるので、文字化けを手修正
- 名前をつけて保存でUTF8にして保存。
3番目の手順で文字化けを手動修正するときは、どうせ文字化けしてよめないんだから【文字化けデータ】とかなんでもいいので置き換えちゃうという割り切りも必用です。
TYPE= を ENGINE= へ一括置換
TYPE=
は廃止されてるので ENGINE=
に一括置換します。
MySQLの仕様が変わってエラーになる構文を修正
これはインポートにトライしながら見つかった構文エラーを一つ一つ修正しました。
今回移行したデータで発生したのは下記2点
Incorrect index name
UNIQUE KEY `` (`desc_form`)
こんなのがあったんですが、不要と判断して削除。
XOOPSのformmailモジュールの formmail_idテーブルの定義にありました。
Too big precision 14 specified for column 'dtstamp'. Maximum is 6.
`dtstamp` timestamp(14) NOT NULL,
こんな定義。これはXOOPSのpiCalモジュールの定義で発見。全部timestamp(6)に置換しました。
ここまできてやっとインポート成功です。
ちなみにこのWebサイトでのDBデータではシリアライズされたデータもあったので EUC-JPでserializeされた文字列をUTF-8でunserializeする。 - Qiita に書いた変換もこのあと行いました。