首页 > 数据库技术 > 详细

CST时区,MYSQL与JAVA-WEB服务器时间相差13个小时的问题

时间:2019-03-27 16:48:43      阅读:519      评论:0      收藏:0      [点我收藏+]

最近倒腾了一台阿里云主机,打算在上面装点自己的应用。使用docker安装了安装mysql后,发现数据库的存储的时间与java-web应用的时间差8个小时,初步怀疑是docker容器时区的问题。经过一系列研究,总算把docker容器的时区给调整过来。满怀欣喜的以为问题得到了解决,再次运行应用,我发现时间竟然相差了13个小时。为了彻底解决问题,决定深入研究一下,皇天不负有心人,总算了解其中缘由,问题也终于解决。下面我还原一下问题过程。

 

初始安装

  初始从mysql镜像安装,没有调整任何东西时,通过下面语句可以看出,mysql默认使用系统时区,docker系统的默认时区是UTC,与北京时间刚好相差8小时。

show variables like "%time_zone%";
select now();

技术分享图片

容器时区调整

调整docker容器时区后(详细过程见:解决Docker容器时区不一致的问题),执行SQL语句,我们可以看到mysql的时区为CST。

技术分享图片

我们的问题点来了,mysql显示时间是正确的,标准的北京时间,但运行我的WEB应用后,时间竟相差了13个小时,一切的罪魁祸首就是CST是个比较混乱的时区

CST时区

  CST有4种含义

  • 美国中部时间 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 小时

JDBC时区协调

mysql驱动向数据插入数据时,需要将应用的时间修改为数据库所在时区的时间,查询时再将数据库存储的时间转换为web服务器所在时区的时间

详细代码见:com.mysql.cj.jdbc.ConnectionImpl和com.mysql.cj.protocol.a.NativeProtocol

技术分享图片

技术分享图片

解决方案

  在my.cnf中增加配置(网上“set global time_zone = ‘+08:00‘;”设置无效)。

default-time-zone=‘+8:00‘

技术分享图片

技术分享图片

到此,问题顺利解决。

 

参考:https://juejin.im/post/5902e087da2f60005df05c3d?utm_source=tuicool&utm_medium=referral

CST时区,MYSQL与JAVA-WEB服务器时间相差13个小时的问题

原文:https://www.cnblogs.com/zhi-leaf/p/10608134.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!