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 2018 08:48:24 +0800(说明是东八区,中国时区即为东八区)

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值