たぷつきません

おなかがでてきた。もうたぷついてるやん。

mantis 1.1.0a2から1.1.0a4へのデータマイグレーション

 a2のデータベースはひどいんですよ。1バイトコード圏のことしか考えていない。UTF-8なのに、かな漢字を示す1文字のUCSを1バイトずつの2つに分けて、それぞれのUCS文字に変えてDBに保存し、表示する際には連結して2バイトコードで表現するという、むちゃくちゃな制御になっていたようです。JDBC使ったツールで見たらいつもおかしかったのですが、今回mantisをアップグレードしたら、表示がとんでもないことになってしまいました。a3以降はちゃんとなったのですが、逆にデータアップグレードがうまくいかずJDBCツールで見た場合と同じように化けるようになりました。
 例えば、「楽天新システム.xls」は、「æ\½å¤©æ–°ã‚·ã‚¹ãƒ†ãƒ .xls」のようになります。なんか修復してくれそうなツールないか探したんですが見当たらなかったので、なんとか復旧するツールを作りました。 →→ ソースダウンロード ←←
 javacして使ってください。ソースコードUTF-8ですのでコンパイル時にエンコード指定してください。

使い方
  1. mysqldump --user=root bugtracker > bugtracker.dump で、UTF-8のファイルにリダイレクトして受け取る。
  2. java Mantisbt11a2To11a3 bugtracker.dump で1バイトUCSを2バイトUCSに可能な限り変換した、bugtracker.dump.outが出力されます。
  3. mysql --user=root bugtracker < bugtracker.dump.out で、書き換えた内容でアップデート。

 Mantisbt11a2To11a3 を実行した結果の、bugtracker.dump.outを秀丸エディタなどで開くと、「UTF-8で変換できない箇所があります。」と言われる場合もあります。でもそれは仕方ないことで、そのデータは最初から漢字の2バイト目が削れてDBに登録されていたものです。Mantisへの課題登録時に要約へ記入する内容が長い場合などは哀しいかな中途半端にDBに登録されてしまうのです。それ以外の可能性としては、化け文字ではなく、ホントに最初から特殊文字を入力していた場合が、該当すると思います。それはあきらめるしかなさそうです。

 このツールは可能な限り復元したいという目的で作ったモノですので、万全を期すものではありません。苦情は受け付けられません。あしからず。

…ちなみに、grinderの吐き出すスクリプトと化け方が酷似。あれも1バイトUCSになっていたんだった。