【mysql时区问题】mysql插入数据时间显示错误

在使用datagrip进行数据库操作时,遇到插入时间比实际少13小时的问题。经过排查,发现MySQL的system_time_zone设置为CST,由于CST有多种解释,Java可能将其解析为美国中部时间。尝试通过修改连接参数、工具设置和VM选项调整时区无效后,最终通过修改MySQL配置文件,设置default-time-zone为'+8:00'并重启服务解决了问题。
摘要由CSDN通过智能技术生成

前天在进行数据库操作的时候,发现了一个问题(备注:使用的工具是datagrip),我新添加了一条数据到数据库,然后到数据库查看,发现创建时间比我插入的时间少了13个小时,但是请求返回的时候,返回的时间又加了13个小时,我先排查了插入数据库时传入的时间参数,传参是没有问题的,所以我又查看了数据库的建表语句,

ctime         timestamp  default CURRENT_TIMESTAMP null comment '创建时间',
utime         timestamp  default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间'

看这个建表语句也是没问题的,然后百度了一下,有人解释mysql的system_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将CST时间以美国中部时间来处理的,所以就出现了刚才的问题,于是我查了一下当前mysql的时区,show variables like '%time_zone%',查询之后发现确实是CST,然后我就上网搜索了修改时区的方法,大致分为三种:

1、在连接时指定时区

jdbc:mysql://xxxx:3306/schema?serverTimezone=Asia/Shanghai

2、以datagrip为例

修改serverTimezone后面的值为Asia/Shanghai

3、VM options中添加 -Duser.timezone=Asia/Shanghai

 这三种方法我都用过,但是依然没有效果,包括关闭默认缓存时区

 最后只能是修改了mysql配置,之前配置中没有默认时区,加上一条时区的配置default-time-zone='+8:00',修改配置,重启mysql服务后,问题解决!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值