您现在的位置是:网站首页 > 代码编程 > JAVA开发JAVA开发

【原】MySQL数据库时间和jdbc查询时间相差12小时

不忘初心 不忘初心 2022-06-14 围观() 评论() 点赞() JAVA开发

简介:最近在公司的一个新项目中,在提测的时候出现了很多时间不对的问题,列表上显示的时间对不上本地机器的时间,表现为MySQL数据库时间和jdbc查询时间相差整12个小时,这种问题多半都是时区不对导致的时间差。因为是新项目,所以部署的Linux服务器也是一台新的,没有使用rds,而是直接在这台Linux服务器上手动安装了一个MySQL,所以同事跟我说的时候,我第一反应就是机器的时间没设置好。如上图,我使用

最近在公司的一个新项目中,在提测的时候出现了很多时间不对的问题,列表上显示的时间对不上本地机器的时间,表现为MySQL数据库时间和jdbc查询时间相差整12个小时,这种问题多半都是时区不对导致的时间差。

MySQL数据库时间和jdbc查询时间相差12小时_JAVA开发_积微成著

因为是新项目,所以部署的Linux服务器也是一台新的,没有使用rds,而是直接在这台Linux服务器上手动安装了一个MySQL,所以同事跟我说的时候,我第一反应就是机器的时间没设置好。

MySQL数据库时间和jdbc查询时间相差12小时_JAVA开发_积微成著

如上图,我使用date查看了一下系统时间,发现这个时间其实是没问题的,进而怀疑是MySQL自身时区设置的有问题。

为了验证,使用select now()mysql中查询一下当前时间,发现now()查询出来的时间也是正确的。

MySQL数据库时间和jdbc查询时间相差12小时_JAVA开发_积微成著

如上图,now()查询的时间与我本机时间一致,但就是查询出来的数据中时间不对。

再去确认一下MySQL时区,一开始的time_zone的值是SYSTEM,忘记截图了,改为GMT+8之后,使用show variables like '%time_zone%'查看一下修改结果,证明时区也没问题了。

MySQL数据库时间和jdbc查询时间相差12小时_JAVA开发_积微成著

问题依旧没有得到解决,又注意到上面那个system_time_zone默认是CST,由于CST时区比较乱,所以需要在代码中追加了时区设置。

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/reservoir?characterEncoding=utf8&useSSL=true&zeroDateTimeBehavior=convertToNull&useTimezone=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root

没想到这些涉及时区的问题也改过之后,依旧还是不行。

在继续排查的过程中,发现了一个细节,测试妹子导入的数据就没有时区问题,就是在页面上添加的就会有问题,瞬间反应过来,这特么该不会是json时区问题吧,因为页面上提交的是payload数据,走的是json格式,而springboot默认使用的是jackson,遂增加jackson时区配置。

#json timezone
spring.jackson.time-zone=GMT+8

问题得到解决,fuck!!!

jacksonmysql

看完文章,有任何疑问,请加入群聊一起交流!!!

很赞哦! ()

文章评论

  • 请先说点什么
    人参与,条评论

请使用电脑浏览器访问本页面,使用手机浏览器访问本页面会导致下载文件异常!!!

雨落无影

关注上方公众号,回复关键字【下载】获取下载码

用完即删,每次下载需重新获取下载码

若出现下载不了的情况,请及时联系站长进行解决

站点信息

  • 网站程序:spring + freemarker
  • 主题模板:《今夕何夕》
  • 文章统计:篇文章
  • 标签管理标签云
  • 微信公众号:扫描二维码,关注我们