2005/10/14

書いたMySQL Connector/J 3.1.10に、とんでもないバグがあって悩まされてしまった。

現象としては、フィールドに入力した文字列の中に日本語があると、再度取得したときに文字列の後ろが切れて無くなってしまうというもの。ちょうど日本語のエンコーディングを何にすれば良いのか考え始めた時に気付いたので、あれこれ試しているうちに夜中になってしまった。

最初は文字列の中に少ししか日本語が入っていなかったので法則性が分からなかったのだけれど、途中で日本語の文字数バイト分だけ後ろが切れていることに気がついた。文字列長の算出ルーチンで、バイト数で数えるべき所を文字数で数えてしまうとそうなってしまう。これは私のバグではないと確信し、MySQL Connector/J 3.1.11をダウンロードして入れ替えた所、すっきり解決。添付されているCHANGESというファイルには:
 - Fixed BUG#11614 - StringUtils.getBytes() doesn't work when using multibyte character encodings and a length in _characters_ is specified.
と書いてあった。

あれこれ試していた時にMySQL自体のバージョンを落としていたこともあり、解決後に最新版に戻そうとして大失敗。MySQLを止めずに新しいバージョンをインストールしたら、データベースファイルが壊れてしまい、更新したMySQLが起動しなくなった。その原因追求と対策に半日。

合計すると、丸一日悩まされたことになる。あー疲れた。でもまぁ解決したから良いか...

10/15に追加:
10/8
 URL: jdbc:mysql://localhost/<databasename>
 Driver: org.gjt.mm.mysql.Driver
と書いたけれど、
 URL: jdbc:mysql://localhost/<databasename>?useUnicode=true&characterEncoding=SJIS
 Driver: com.mysql.jdbc.Driver
で良いみたい。

注意:上記<databasename>はデータベース名称だけで前後の<>は不要
0


teacup.ブログ “AutoPage”
AutoPage最新お知らせ