MySQLにJDBCでアクセスしたら、文字化け

MySQL 5.1に対してWindows XP上からJDBCでアクセスしたら、以下の症状が出ました。

  • 全件検索(SELECT * FROM hoge)の場合、データは文字化けせずにとれる
  • 日本語を利用してLike検索(SELECT * FROM hoge where name like  ‘%ほげほげ%’)すると、SQLのLike部分が文字化けして、正常に検索出来ない。

環境は以下です。

  • JavaのソースはすべてUTF-8で記載
  • MySQLのデータベースはutf8で作成
  • JDBCはConnector/J 5.1.12を利用

で、調査結果です。

  • MySQL<=>JavaはUTF-8と同一なので、MySQLからJDBC経由で取得したデータは文字化けせずに取得可能
  • 検索のSQL(SELECT * FROM hoge where name like ‘%ほげほげ%’)の場合、OS標準の文字コード(SJIS?)でLike検索を行っていた可能性がある

対応策は以下。

  • JDBCのURLにcharacterEncodingを追加することで解決。
jdbc:mysql://127.0.0.1/testdb?characterEncoding=utf8

よくよく調べてみれば、ほかにもいっぱい情報があるようです。

楽しくJavaをコーディング出来るまでにはまだまだ覚えることがいっぱいありますね。

This entry was posted in Java. Bookmark the permalink.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt="">