mysql存储时间差13个小时_Mysql保存时间datetime时,相差13小时的问题

起因

近期一个项目报告,线上服务器时间不对,比正常时间相差了13个小时,同一个数据库不同的应用端写入时间不对。

一般程序相差N个小时的问题,应该说99.99%是时区问题引起的,紧接着我们需要检查各环境的时区配置,当前数据库是使用的阿里云RDS 5.7。

排查

校验服务器时间,结果无误,正常的东八区时间。

校验docker容器内部时间,结果无误,正常的东八区时间。

校验jvm虚拟机时间配置,结果无误,正常的东八区时间。

校验mysql服务器的时间配置,结果无误,是正确的,不过时区项显示的是:CST时区,突然明悟。

1a243b37be8a47b0c328781783870a0d.png

CST 时区

名为 CST 的时区是一个很混乱的时区,有四种含义:

美国中部时间 Central Standard Time (USA) UTC-06:00

澳大利亚中部时间 Central Standard Time (Australia) UTC+09:30

中国标准时 China Standard Time UTC+08:00

古巴标准时 Cuba Standard Time UTC-04:00

美国从“3月11日”至“11月7日”实行夏令时,美国中部时间改为 UTC-05:00,与 UTC+08:00 相差 13 小时。

为什么老的应用程序写入数据是没有问题的,而新应用有问题呢?差别就在于老系统中mysql驱动为老版本,而新系统采用了最新的mysq8.x驱动,新驱动与老驱动的处理方式的差异导致。

解决方法(其中一种即可)

直接将 mysql配置参数中的 system_time_zone修改为 +8:00,default-time-zone = '+08:00' 重启mysql生效。

在java程序mysql连接地址上添加参数 serverTimezone=Asia/Shanghai,重新发布程序即可,由于线上数据库不能轻易重启,我们采用滚动升级方式,无缝升级应用程序解决该问题。

版权声明:除特殊说明,文章均为博主 久酷 原创文章,转载请注明来源

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值