带有休眠和 MySQL 的时区问题

2022-09-04 05:58:51

我正在尝试用tomcat(8.5)和mysql(v.8.0.12)配置hibernate(5.3.3 Final)。当我启动我的HibernateTest.java(教程中非常简单的代码,这里没有问题)将hibernate.connection.url设置为' jdbc:mysql://localhost:3306/sakila',我遇到了以下错误:

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目前设置在全局和会话的“系统”时区(mysql>选择@@global.time_zone,@@session.time_zone)。我的系统时区确实是巴黎/马德里。在我的休眠.cfg.xml文件中,当我写入连接网址时:

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;'.

这不是stackoverflow帖子中提到的问题“mysql服务器时区和jdbc连接的问题”,因为“&”被eclipse拒绝,请参阅休眠.cfg.xml文件附加的屏幕截图:

[对实体“useLegacyDatetimeCode”的引用必须以分隔符';'结尾]1 个

它不是“mysql:”和“//localhost”之间的不可见字符,正如堆栈溢出帖子“格式错误的数据库URL,无法解析主URL部分”中提到的那样。我试图通过MySql Workbench设置本地时间(默认时区= '+02:00')的选项来解决这个问题,这与马德里/巴黎的夏令时(我在这里的情况)相吻合。它不会改变任何事情。有什么想法吗?我是否必须在其他地方对其进行配置?感谢您的帮助,我已经在这个上面3天了,没有成功。


答案 1

您需要转义 :&

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


答案 2

我终于找到了一个解决方案。由于看起来';'和'&'都不能完成添加多个参数的技巧,所以我取出了所有参数,只尝试了一个参数:

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

它确实做到了,我不再有问题了。


推荐