MySQL で SQL が文字化け
MySQL で JDBC を利用した SQL 実行を試みたところ、以下のエラーが発生。
致命的: null
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘???_???’ at line 1
実際にエラーが発生しているコードは「PreparedStatement statement = connect.openStatement(“SELECT COUNT(*) FROM 参加者_テスト”);」で、デバッグでstatementの値を確認すると確かに「SELECT COUNT(*) FROM ???_???」となっていた。
TF-8の宣言を入れないとダメでした。以下はSQLが文字化けしていた時の例。
connect = DriverManager.getConnection("jdbc:mysql://serv/dbname? user=sample&password=smpPass");
接続文字列の設定に「&useUnicode=true&characterEncoding=UTF-8」を加え、以下とすることで解決しました。
connect = DriverManager.getConnection("jdbc:mysql://serv/dbname? user=sample&password=smpPass& useUnicode=true&characterEncoding=UTF-8");
デバッグで確認すると、今度は「SELECT COUNT(*) FROM 参加者_テスト」となっていて文字化けが解消していることが確認できました。処理もエラーとなることなく実行されました。