MySQL时区问题

今天遇到一个很奇怪的问题,在代码里面通过MyBatis 能查询到今天的数据,但是将打印的SQL放到DataGrip里执行,却发现没有数据(实际上数据库最新的数据只存了昨天的)。因为SQL里有用到时间转换函数,create_at = date_format(#{endTime}, '%Y-%m-%d'),endTime是java.util.Date类型。在我将DataGrip中SQL的时间设置为前一天的日期后得到了MyBatis 一样的结果。大概知道是什么原因了!
验证一下:

  1. 在DataGrip中查询连接的数据库的配置:
SHOW VARIABLES LIKE '%time_zone%';
image.png

可以看到时区设置的是CST(默认好像就是这个?)。

  1. 再去看配置文件里面的数据库连接参数,


    image.png

发现果然没有配置时区。
至此,结案~


解决方案:

  1. 修改数据库的默认时区配置;
  2. 修改数据库连接参数:
    加上 &serverTimezone=GMT%2b8 或者serverTimezone=Asia/Shanghai

关于CST时区的问题,详细的可以自行搜索。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 以下所有讨论都是基于 MySQL 数据库 问题描述 在用 Java 做数据库开发时,有时会碰到 Java 程序中的...
    Shauway阅读 4,917评论 0 1
  • 问题 插入时间到数据库中,会少13个小时(有时候是11个小时) 读取出来,则会自动加上少了的时间,读到的Date对...
    王某某的笔记阅读 351评论 0 0
  • MySQL默认时区为UTC,我们属于东八区时间,和UTC存在八个小时时差。在做时间相关操作的时候,会出现不一致问题...
    jyhnp阅读 805评论 0 0
  • 最近给客户部署项目时,由于项目在开发过程中 python 的 now() 和 utcnow() 的混合使用,导致部...
    宝宝家的隔壁老王阅读 1,879评论 5 3
  • 前提背景1.mysql-connector-java的版本号8.0.21 1.在北京时间【Thu Dec 16 ...
    zjkdifvpwlkqumn阅读 844评论 0 1