SpringBoot 保存 MySql 时间时差8小时

释放双眼,带上耳机,听听看~!

最近在搭建 SpringBoot 项目,在集成 MyBatis,在做数据保存或者更新,发现 Java 上的时间跟最终保存在 MySql 的时间不一致,少了 8 小时;

这种 +8 / -8 ,可以很容易的判断出来,时区有问题;

问题排查

  1. Java 断点 new Date(); 时间是正常无误的;
  2. MySql 查询 select now(); 时间是正常无误的;
  3. 我用的本地数据库,我时间没问题啊,所以时间无误;

查询 MySql 时区

SHOW VARIABLES LIKE '%time_zone%';
-- 显示的结果
system_time_zone:CST
time_zone:SYSTEM

CST 同时可以代表如下 4 个不同的时区:美国,澳大利亚,中国,古巴四个国家的标准时间

Central Standard Time (USA) UTC-6:00
Central Standard Time (Australia) UTC+9:30
China Standard Time UTC+8:00
Cuba Standard Time UTC-4:00

它不是一个固定的时区,所以也排除掉;

我们再看下 my.ini 的配置,我在里面加上,让它默认 +8

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

时区

但是问题依旧没解决;

最容易遇到的几个地方的时区都没问题,到底坑在哪里呢?来了来了,坑在这里。查看下我们的 jdbc 连接的url

url: jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=UTC

重点:serverTimezone

这里默认了服务时区为 UTC

UTC 时区代表哪呢?

很可惜,它并不代表任何国家了,它代表了世界,又称世界统一时间,世界标准时间,国际协调时间,简称 UTC。

既然 UTC 都没有一个标准,那我们就改成标准的;

serverTimezone=Asia/Shanghai

这是亚洲上海,相信您很熟悉。

还有 Asia/Chongqing 、Asia/Hong_Kong

通过改成以上的,问题解决;妥了~

想查看详细的时区列表,里面非常详细

/usr/share/zoneinfo

人已赞赏
数据库开发运维笔记

Mac 下安装 MySql 步骤

2019-4-17 22:36:08

数据库开发

Mac -bash mysql command not found 错误

2019-5-22 9:30:12

2 条回复 A文章作者 M管理员
  1. 被这问题折腾半死

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索