服务器时区值“ CEST”无法识别

Fil*_*odb 13 mysql lamp timezone

我在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'; 
Run Code Online (Sandbox Code Playgroud)

但这并没有持续。

然后我添加到my.cnf文件(在/ etc / mysql中):

[mysqld] 
default-time-zone = 'Europe/Rome' 
Run Code Online (Sandbox Code Playgroud)

并且:

default_time_zone = 'Europe/Rome' 
Run Code Online (Sandbox Code Playgroud)

但是数据库服务器仍然无法启动...

为什么会发生错误?有人可以帮我吗?

谢谢!

Cla*_*son 15

@aiman的答案不正确,因为在您的情况下,有效服务器时区不是 UTC。

您会在网上找到一些解决方案,其中包括jdbc连接字符串上的其他参数,但是有些情况下您无法更改此字符串。

这是我的解决方法:

首先在mysql中导入系统时区:

$ mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Run Code Online (Sandbox Code Playgroud)

然后在(或在最近的Debian / Ubuntu发行版中)的[mysqld]部分中将默认的mysql服务器时区设置为实际的服务器时区,例如:/etc/mysql/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf

default_time_zone = Europe/Paris
Run Code Online (Sandbox Code Playgroud)

并且不要忘记重启mysql

$ sudo service mysql restart
Run Code Online (Sandbox Code Playgroud)

(或相应的命令,具体取决于您的发行版)。


Han*_*ers 10

如果问题出在连接到数据库时,我在这个答案的注释中找到了解决方案。

在您的连接 url 中使用以下内容:

String url = "jdbc:mysql://localhost/mydb?serverTimezone=Europe/Rome";
Run Code Online (Sandbox Code Playgroud)

这对我与欧洲/阿姆斯特丹的飞行路线和时区连接很有用。

  • 这对我有用。请注意,serverTimezone=CEST 不起作用,但 Europe/Rome 起作用。 (2认同)
  • 非常感谢它通过改变欧洲/巴黎对我有用 (2认同)

aim*_*man 6

首先查看您的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
Run Code Online (Sandbox Code Playgroud)

然后重新启动mysql服务器:/etc/init.d/mysqld restart

请享用