「Mysql-connector-java のバグで JavaからMySQLに接続できない」の版間の差分

提供: tknotebook
移動: 案内検索
 
(原因)
15行: 15行:
  
 
==原因==
 
==原因==
Windows から JDBC接続するのは久しぶりだったので、調べてみると、そこいらじゅうで起きている現象であることを
+
WJDBC接続は久しぶりだったので、バグを疑って調べてみたところ、これはそこいらじゅうで最近起きている現象であることを発見。
発見。'''mysql-connector-java の5.1.33 ~ 37 のバグ'''でした。
+
'''mysql-connector-java の5.1.33 ~ 37 のバグ'''でした。'''2015年秋から今年の2016年春までに存在していたバグ'''です。
  
 
私の使用している mysql-connector-java は 6.0.5 のはずなのであれっと思ったのですが、http://bugs.mysql.com/bug.php?id=79343 によれば
 
私の使用している mysql-connector-java は 6.0.5 のはずなのであれっと思ったのですが、http://bugs.mysql.com/bug.php?id=79343 によれば

2016年11月13日 (日) 02:48時点における版

メインページ>コンピュータの部屋>MySQL


現象

2016.11.13 Windows版の MySQL5.7(64bit) に Javaから JDBC で接続しようとしたところ

The server time zone value '◇◇◇◇◇' is unrecognized or represents more than one time zone.

というエラーで接続できませんでした。JDBC の URL はこれ

con = DriverManager.getConnection("jdbc:mysql://localhost:3306/flashcard", "ユーザ名", "パスワード");

なんの変哲もないコードです。つながらないわけがありません。

原因

WJDBC接続は久しぶりだったので、バグを疑って調べてみたところ、これはそこいらじゅうで最近起きている現象であることを発見。 mysql-connector-java の5.1.33 ~ 37 のバグでした。2015年秋から今年の2016年春までに存在していたバグです。

私の使用している mysql-connector-java は 6.0.5 のはずなのであれっと思ったのですが、http://bugs.mysql.com/bug.php?id=79343 によれば ver.5 系のバグがまだ ver.6系にマージされていない模様。ver.5では2016年春に終結したバグが未だに残っているらしいのです。

対処

対処法は2つあります。

JDBCの URLを変更する

JDBCの URL に

characterEncoding=UTF-8
serverTimezone=JST

を加えます。つまり私のコードでは

con = DriverManager.getConnection("jdbc:mysql://localhost:3306/flashcard?characterEncoding=UTF-8&serverTimezone=JST", "ユーザ名", "パスワード");

mysql-connector-java を ver5系にダウングレードする

maven central では ver5系は 2016.11.13 の時点で 5.1.40 が最新のようです。 5.1.40では正常に動くことを確認しました。