「Mysql-connector-java のバグで JavaからMySQLに接続できない」の版間の差分
提供: tknotebook
(→mysql-connector-java を ver5系にダウングレードする) |
(→JDBCの URLを変更する) |
||
34行: | 34行: | ||
を加えます。つまり私のコードでは | を加えます。つまり私のコードでは | ||
− | con = DriverManager.getConnection("jdbc:mysql://localhost:3306/flashcard?characterEncoding=UTF-8&serverTimezone=JST", "ユーザ名", "パスワード"); | + | con = DriverManager.getConnection("jdbc:mysql://localhost:3306/flashcard?characterEncoding=UTF-8&serverTimezone=JST", |
− | + | "ユーザ名", "パスワード"); | |
+ | |||
===mysql-connector-java はお行儀よく安定版(ver.5)を使う === | ===mysql-connector-java はお行儀よく安定版(ver.5)を使う === | ||
maven central では ver5系は 2016.11.13 の時点で 5.1.40 が最新のようです。 | maven central では ver5系は 2016.11.13 の時点で 5.1.40 が最新のようです。 | ||
5.1.40では正常に動くことを確認しました。 | 5.1.40では正常に動くことを確認しました。 |
2016年11月13日 (日) 07:50時点における版
現象
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", "ユーザ名", "パスワード");
なんの変哲もないコードです。つながらないわけがありません。
原因
JDBC接続は久しぶりだったので、バグを疑って調べてみたところ、これはそこいらじゅうで最近起きている現象であることを発見。 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 系(General Available版)のバグがまだ ver.6系(開発版)にマージされていない模様。 ver.5では2016年春に終結したバグが未だに ver6系に残っているのです。
対処
対処法は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 はお行儀よく安定版(ver.5)を使う
maven central では ver5系は 2016.11.13 の時点で 5.1.40 が最新のようです。 5.1.40では正常に動くことを確認しました。