我在linux上的lampp环境中使用hibernate(Hibernate Maven 5.2.15.Final,Mysql-connector Maven 8.0.9-rc)和mysql 5.7。
我在意大利(中欧夏令时间),并且在3月25日,连接db上出现以下错误:
服务器时区值' CEST'无法识别或代表更多 比一个时区。您必须配置服务器或JDBC 驱动程序(通过serverTimezone配置属性)使用更多 如果您想利用时区支持,请指定时区值。
在mysql控制台上,我跑了:
my.cnf
但这并没有持续下去。
然后我添加到[mysqld]
default-time-zone = 'Europe/Rome'
文件(在/ etc / mysql中):
default_time_zone = 'Europe/Rome'
还有:
com.facebook.android:facebook-login:4.28.0
但数据库服务器仍未启动...
为什么会出现错误? 有人能帮助我吗?
谢谢!
答案 0 :(得分:11)
@aiman的答案不正确,因为在您的情况下,有效服务器时区是不是 UTC。
您会在网上找到一些解决方案,包括jdbc连接字符串上的其他参数,但是在某些情况下您无法更改此字符串。
这是我的固定方法:
首先在mysql中导入系统时区:
$ mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
然后在[mysqld]
(或最近的Debian / Ubuntu发行版的/etc/mysql/my.cnf
)的/etc/mysql/mysql.conf.d/mysqld.cnf
部分中将默认的mysql服务器时区设置为实际的服务器时区,例如:>
default_time_zone = Europe/Paris
别忘了重启mysql
$ sudo service mysql restart
(或适当的命令,具体取决于您的发行版)。
答案 1 :(得分:5)
首先看看你的mysql服务器时区:
mysql -e "SELECT @@global.time_zone;" -u <mysqluser> -p
。
最有可能的是SYSTEM
找到您的系统时区:date +”%Z
。
看看它的CEST
您需要更改系统时区:
#cd /usr/share/zoneinfo
#ls -l
#rm /etc/localtime
#ln -s /usr/share/zoneinfo/UTC /etc/localtime
然后重启你的mysql服务器:/etc/init.d/mysqld restart
。
享受
答案 2 :(得分:2)
如果问题出在连接数据库时,我在this answer的NOTE中找到了解决方法。
在您的连接网址中使用以下内容:
String url = "jdbc:mysql://localhost/mydb?serverTimezone=Europe/Rome";
这对我来说可以与欧洲/阿姆斯特丹的时区和时区联系起来。