[java] MySQL JDBCドライバ5.1.33 - タイムゾーンの問題



Answers

Mavenを使用している場合は、別のMySQLコネクタバージョン(同じエラーがあったので、6.0.2から5.1.39に変更しました)をpom.xml設定することができます:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.39</version>
</dependency>

別の回答で報告されているように、この問題はバージョン6.0.3以上で修正されているため、更新されたバージョンを使用することができます:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>6.0.3</version>
</dependency>

Mavenは、 pom.xmlファイルを保存した後、プロジェクトを自動的に再ビルドします。

Question

いくつかの背景:

Tomcat 7でJava 1.6 Webアプリケーションを実行しています。データベースはMySQL 5.5です。 以前は、DBに接続するためにMySQL JDBCドライバ5.1.23を使用していました。 すべてが働いた。 私は最近MySQL JDBCドライバ5.1.33にアップグレードしました。 アップグレード後、Tomcatはアプリケーションの起動時にこのエラーをスローします。

WARNING: Unexpected exception resolving reference
java.sql.SQLException: The server timezone value 'UTC' is unrecognized or represents more than one timezone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc timezone value if you want to utilize timezone support.

なぜこうなった?




  1. 私は[mysqld]セクションのmysql設定ファイルを追加しました

    default_time_zone='+03:00'
    
  2. そしてmysqlサーバを再起動します:

    sudo service mysql restart
    

+03:00私のUTCタイムゾーン。

私のOSの設定ファイルへのパスubuntu 16.04:

/etc/mysql/mysql.conf.d/mysqld.cnf

警告:あなたの時間帯に夏時間と冬時間がある場合。 あなたは、変更時にUTCを設定する必要があります。 年2回(通常)またはSUDOでCRONTABを設定する。

私のURL jdbc接続:

"jdbc:mysql://localhost/java"



接続文字列は次のように設定する必要があります。

jdbc:mysql://localhost/db?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC

&代わりに&amp;を使用する&amp;xmlファイル( persistence.xmlstandalone-full.xmlなど)で接続を定義している場合&amp; CDATAブロックを使用してください。






Related