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

Posted

技术标签:

【中文标题】服务器时区值“CEST”无法识别【英文标题】:The server time zone value 'CEST' is unrecognized 【发布时间】:2018-09-06 04:54:51 【问题描述】:

我在 Linux 上的 Lampp 环境中使用休眠(Hibernate Maven 5.2.15.Final,mysql-connector Maven 8.0.9-rc)和 mysql 5.7。

我在意大利(中欧夏令时),一次 3 月 25 日,连接数据库出现以下错误:

或代表更多 超过一个时区。您必须配置服务器或 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 server 仍然没有启动...

为什么会出现错误? 有人可以帮助我吗?

谢谢!

【问题讨论】:

您需要在 my.cnf 文件中进行更改。看看this answer 【参考方案1】:

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

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

这是我修复它的方法:

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

$ mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

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

default_time_zone = Europe/Paris

别忘了重启mysql

$ sudo service mysql restart

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

【讨论】:

以防万一有人在 Windows 上遇到此问题,这对我将时区导入 MySQL 有用:按照说明在此处下载 SQL 文件:dev.mysql.com/doc/refman/5.6/en/… 并执行 mysql -u root mysql < timezone_posix.sql 这应该是正确的答案。我在网上搜索的任何其他答案要么更改时区(!!!),要么更改连接字符串,有时无法更改。谢谢! ubuntu 上的 mysql 8 不会以此 [ERROR] [MY-010361] [Server] Fatal error: Illegal or unknown default time zone 'Europe/Paris' 开头 重启后你应该检查一下时区。 SELECT @@global.time_zone;。如果您在此处看到 SYSTEM,则表示更改无效。我已明确设置为 root aDB 用户 SET GLOBAL time_zone = 'Europe/Stockholm'; 然后我可以连接到休眠。【参考方案2】:

首先查看你的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

享受

【讨论】:

不得不使用“systemctl restart mysql”重启,但所有其他命令都救了我:) 谢谢,在尝试其他解决方案但没有成功后,它也对我有用。为可能遇到相同问题的人添加信息:尝试执行命令“rm /etc/localtime”和“ln -s /usr/share/zoneinfo/UTC /etc”时出现“权限被拒绝” /当地时间”。我已经解决了它在开头添加“sudo”,例如:sudo rm /etc/localtime. 因此您将实际时区(即 CEST)更改为 UTC,而不是您的时区。这不是一个解决方案,而是一个肮脏的解决方法。【参考方案3】:

如果问题是连接到数据库时,我在this answer的注释中找到了解决方案。

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

String url = "jdbc:mysql://localhost/mydb?serverTimezone=Europe/Rome";

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

【讨论】:

它对我有用。请注意,serverTimezone=CEST 不起作用,但 Europe/Rome 起作用。 是的,我相信这是因为 CEST 不够具体,加上 S 代表夏令时,所以无论一年中的什么时候,你都会告诉服务器/数据库它设置为夏令时。

以上是关于服务器时区值“CEST”无法识别的主要内容,如果未能解决你的问题,请参考以下文章

Kafka Connect MySQL“无法识别服务器时区值‘EDT’”

无法连接到 mySQL,因为无法识别服务器时区值“GMT Summer Time”

Spring Boot 无法连接到 MySQL:无法识别服务器时区值“Mitteleuropäische Zeit”

java.sql.SQLException:无法识别服务器时区值“Hora de verano GMT”[重复]

BigQuery 在解析时无法识别时区

时区缩写 UTC, CST, GMT, CEST 以及转换