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.

由于数据库和系统时区差异所造成的


首先想到的是看看连接数据库的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=jdbc:mysql://localhost:3306/bbs?serverTimezone=UTC
 

 

没问题,而且在开发环境url是可以正常使用的。

 

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

 

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

服务器上直接数据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 20190  08:56:21 +0800(说明是东八区,中国时区即为东八区)

然后重启MySQL服务:service mysqld restart,发现项目服务可以正常启动,问题解决!

转载于:https://www.cnblogs.com/123hll/p/11496003.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值