The server time zone value 'EDT' is unrecognized or represents more than one time zone.

The server time zone value 'EDT' is unrecognized or represents more than one time zone.mysql

因为数据库和系统时区差别所形成的sql


首先想到的是看看链接数据库的url有没有问题:jdbc:mysql://xxx:3306/dbname?useUnicode=true&characterEncoding=utf-8数据库

 

解决方案:
    在jdbc链接的url后面加上serverTimezone=GMT便可解决问题,若是须要使用gmt+8时区,须要写成GMT%2B8,不然会被解析为空。再一个解决办法就是使用低版本的MySQL jdbc驱动,5.1.28不会存在时区的问题。服务器

例如:
url=jdbc:mysql://localhost:3306/bbs?useUnicode=true$characterEncoding=utf8测试

改成url

url=jdbc:mysql://localhost:3306/bbs?serverTimezone=UTC
 rest

 

没问题,并且在开发环境url是能够正常使用的。code

 

在网上查了一些资料说是可能数据库时间与数据库所在服务器时间不一致致使,可是看了下二者时间是一致的,问题一直没有解决,能够肯定的是跟数据库所在服务器的时区有关,最后顺这个思路去查找相关更换服务器时区的资料。server

 

最后比较开发环境与测试环境的数据库服务器时区,发现开发环境是CST,测试环境是EDT:utf-8

服务器上直接数据date命令就能够看到时区,数据库里咱们是在navicate中使用show variables like '%time_zone%'查看数据库时区。

 

因而更换测试环境时区:首先cat /etc/sysconfig/clock文件,发现这是美国时间,根据注释发如今/etc/localtime文件是定义时区的文件,备份并删除/etc/locatime文件,而后根据网上资料找到/usr/share/zoneinfo/发现这里都是各个时区的文件,复制上海时区文件到/etc/下并重命名为localtime:

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

使用date查看时间发现时区变为CST,使用date -R查看系统时间,Thu,27 Sep 2018 08:48:24 +0800(说明是东八区,中国时区即为东八区)

而后重启MySQL服务:service mysqld restart,发现项目服务能够正常启动,问题解决!

相关文章
相关标签/搜索