web-dev-qa-db-ja.com

hibernateとMySQLのタイムゾーンに関する問題

Tomcat(8.5)およびmysql(v.8.0.12)でhibernate(5.3.3 Final)を構成しようとしています。 hibernate.connection.urlを「jdbc:mysql:// localhost:3306/sakila」に設定してHibernateTest.Java(チュートリアルの非常に簡単なコード、ここでは問題ありません)を起動すると、次のエラーが発生します。

Caused by: Java.sql.SQLException: The server time zone value 'Paris, Madrid 
(heure d?été)' is unrecognized or represents more than one time zone. You 
must configure either the server or JDBC driver (via the serverTimezone 
configuration property) to use a more specifc time zone value if you want to 
utilize time zone support.

MySQLは現在、グローバルおよびセッションの「SYSTEM」タイムゾーンに設定されています(mysql> select @@ global.time_zone、@@ session.time_zone)。そして、私のシステムのタイムゾーンは確かにパリ/マドリードです。 hibernate.cfg.xmlファイルで、接続urlを書くとき:

jdbc:mysql://localhost:3306/sakila?useJDBCCompliantTimezoneShift=true;useLegacyDatetimeCode=false;serverTimezone=UTC;

エラーは次のとおりです。

com.mysql.cj.exceptions.WrongArgumentException: Malformed database URL, failed to parse the connection string near '=false;serverTimezone=UTC;'.

「&」はEclipseによって拒否されているため、stackoverfloxの投稿「mysqlサーバーのタイムゾーンとjdbc接続の問題」で言及されている問題ではありません。hibernate.cfg.xmlファイルの添付のスクリーンショットを参照してください。

エンティティ「useLegacyDatetimeCode」への参照は、区切り文字「;」で終了する必要があります

Stackoverflowの投稿「不正なデータベースURL、メインURLセクションの解析に失敗しました」で言及されているように、「mysql:」と「// localhost」の間の非表示文字ではありません。私は、MySql Workbenchを使用して、マドリード/パリの夏時間に合うローカル時間(default-time-zone = '+02:00')のオプションを設定することで、この問題を回避しようとしました(私の場合)。何も変わりません。何か案が?別の場所に設定する必要がありますか?あなたの助けをありがとう、私はこれを3日間知っていましたが、成功しませんでした。

6
Codizon

私はついに解決策に出会いました。どちらも「;」ではないように見えたまた、「&」は複数のパラメーターを追加するトリックを実行しません。すべてのパラメーターを取り出し、1つのパラメーターのみを試しました。

jdbc:mysql://localhost:3306/sakila?serverTimezone=UTC

そして、それはトリックをしました、私はもうこれで問題を持ちません。

4
Codizon

&をエスケープする必要があります:

jdbc:mysql://localhost:3306/sakila?useSSL=false&serverTimezone=UTC

詳細はこちらをご覧ください: https://docs.jboss.org/exojcr/1.12.13-GA/developer/en-US/html/ch-db-configuration-hibernate.html

10

次のURLでエラーが発生しました:jdbc:mysql:// localhost:3306/db?useLegacyDatetimeCode = false&serverTimezone = CET

これは私のために働いた:「&」を「&」に置き換えます。

0
Maarten