JavaでJDBCを使ってMySQLを利用する際、INSERTでデータを追加したら登録したデータが文字化けしていました…
データベースは CHARACTER SET utf8 COLLATE utf8 として作成し、Java 内でも UTF-8 を使用しているので、文字化けが発生する原因が分かりませんでした。しかも、MySQLモニタ等であらかじめ登録してあるデータを読み出す際には文字化けが発生しません。 Java ➡ MySQL の時だけおかしくなるようです。
ということで、調べてみましたが、JDBCでコネクションを取得する際に、文字コードを指定する方法があるようなので、試してみました。具体的には以下のようにします。
Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection con = DriverManager.getConnection( "jdbc:mysql:3306//localhost/sampledb?useUnicode=true&characterEncoding=utf8", "username", "password");
これを試してみたところ…うまくいきました!文字化けしていません!
でも何でJDBCのURLに文字コードの設定をしなくてはいけないのか、そしてなぜ読み出しでは文字化けしないのか、それはまだ分かりません…