侧边栏壁纸
  • 累计撰写 12 篇文章
  • 累计创建 11 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

数据库时间与查询结果不一致的问题

bingo
2021-11-23 / 0 评论 / 0 点赞 / 1,299 阅读 / 422 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-12-29,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

问题描述:

在开发过程中,遇到一个时区的问题:在数据库中的时间与代码查询出来的时间差了8小时,猜测是时区问题。

问题排查:

  1. 首先考虑是否在 application.yml 中数据库连接中指定了时区,没有则在链接后加上参数 serverTimezone=GMT%2B8,查询配置文件后发现已经加上了时区,但是问题还是存在,而之前项目没有遇到过该问题
    时区问题1
  2. 给程序打断点,查看 mybatis 返回时间,发现时间与数据库一致,但是返回前端转换成日期格式后出现时差,经过查询资料,发现是 json 格式化的问题,默认时区为UTC,和北京时间差8小时。

解决办法:

  1. 在pojo类中需要格式化日期的字段上的注解 @JaonFormat 加上参数 timezone = "GMT+8"即可。
    时区问题2
  2. 也可以在配置文件中全局指定json解析日期的时区

总结:

数据库时间和查询出的时间不一致大概率是时区不一致导致的,而时区不一致的因素有很多:服务器时区、MySQL时区、MySQL连接,以及最后的实体类时间转换过程。因此,需要一步一步逐步排查问题。

参考文章: Mybatis(JsonFormat)+PostgreSQL:提取的时间与实际存储时间不同后台接收前台数据和时间数据JsonFormat和DateFormat数据库时间和查询出来的时间不一致问题解决

0

评论区