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
よくよく調べてみれば、ほかにもいっぱい情報があるようです。
- http://d.hatena.ne.jp/omochist/20060513/1147503245
- http://www.atmarkit.co.jp/flinux/rensai/mysql08/mysql08b.html
楽しくJavaをコーディング出来るまでにはまだまだ覚えることがいっぱいありますね。