Hibernate和MySQL的时区问题

时间:2018-08-04 15:47:33

标签: java mysql hibernate timezone

我正在尝试使用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>选择@@ 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;'.

stackoverflox帖子“带有mysql服务器时区和jdbc连接的问题”中提到的问题不是问题,因为Eclipse拒绝了“&”,请参见hibernate.cfg.xml文件的屏幕截图:

The reference to entity "useLegacyDatetimeCode" must end with the delimiter ';'

这不是stackoverflow帖子“格式错误的数据库URL,无法解析主要URL部分”中提到的'mysql:'和'// localhost之间的不可见字符。 我试图通过MySql Workbench设置适合马德里/巴黎夏令时的本地时间(default-time-zone ='+02:00')选项来解决此问题(这里是我的情况)。它不会改变任何事情。 任何想法?我是否需要在其他地方进行配置? 谢谢您的帮助,我已经参加了这三天,但没有成功。

3 个答案:

答案 0 :(得分:6)

您需要转义&

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

答案 1 :(得分:3)

我终于找到了解决方案。 看起来都不是“;”也不用'&'来增加多个参数,我取出了所有参数,只尝试了一个参数:

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

它成功了,我对此不再有问题。

答案 2 :(得分:0)

以下URL产生了错误: jdbc:mysql:// localhost:3306 / db?useLegacyDatetimeCode = false&serverTimezone = CET

这对我有用: 用“&”替换“&”。