我在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控制台上,我跑了:
SHOW GLOBAL VARIABLES LIKE 'time_zone';
SET GLOBAL time_zone='Europe/Rome';
但那并没有持续下去。
然后我添加到my.cnf
文件(在/ etc / mysql中):
[mysqld]
default-time-zone = 'Europe/Rome'
并且:
default_time_zone = 'Europe/Rome'
但是db服务器还没有启动......
为什么会出现错误?有人能帮助我吗?
谢谢!
@ 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
(或根据您的发行版的相应命令)。
首先看看你的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
。
请享用