mysql数据库时差

背景

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'; 只会修改当前会话的时区,停止会话就失效。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值