mysql查出来的时间跟数据库相差13/14小时

背景

mysql查出来的时间跟数据库相差13/14小时,写入的时间跟数据库也相差13/14小时。

问题原因

  • 查看时区:
    在mysql中执行以下命令:
SHOW VARIABLES LIKE '%time_zone%';

查询结果如下:

可以看到时区使用的是 CST,而 CST 是一种混乱的时区。它可以有多种表现:

美国中部时间 Central Standard Time (USA) UTC-05:00 / UTC-06:00
澳大利亚中部时间 Central Standard Time (Australia) UTC+09:30
中国标准时 China Standard Time UTC+08:00
古巴标准时 Cuba Standard Time UTC-04:00

Java和Mysql协商时区时把Mysql的CST时间当成了美国中部时间即UTC-5(美国从“3月11日”至“11月7日”实行夏令时,美国中部时间改为 UTC-05:00,其他时候是UTC-06:00)。我们国家是UTC+08:00 时区,所以差了13/14个小时

解决方法:

  • 第一种:

在项目的jdbc配置中,加入时区 &useTimezone=true&serverTimezone=GMT%2B8
示例如下:

jdbc:mysql://主机名:3306/库名?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&useTimezone=true&serverTimezone=GMT%2B8
  • 第二种:
##修改mysql全局时区为北京时间,即我们所在的东8区
set global time_zone = '+8:00'; 
flush privileges;

如果使用 set time_zone = '+8:00'; 只会修改当前会话的时区,停止会话就失效。

参考资料:

https://juejin.cn/post/6844903476225376264

posted on   乐之者v  阅读(1310)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2018-11-15 Zookeeper的简单理解
2016-11-15 为什么重写equals时必须重写hashCode方法?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

点击右上角即可分享
微信分享提示