问题表现

业务中有一个接口是查询当前时间前一天的数据,mybatis-plus后台生成的sql语句如下:

==>  Preparing:SELECT * FROM xxx WHERE ( time BETWEEN ? AND ?)
==>  Parameters: 2022-06-08T10:35:00.001(LocalDateTime), 2022-06-09T10:35:00.001(LocalDateTime)
<==      Total: 0

用navicat连接数据库,使用上述sql进行查询,可以查询到2条数据,并不是日志输出的0条。

问题排查

1.把查询到的这2条数据添加到本地mysql库,启动服务-调用接口,接口返回2条数据。排除代码问题以及数据问题。

2.在有问题的数据库中新增一条数据,发现数据库时间错误,与当前时间差了八个小时:

怀疑问题出在这里

问题处理

1.查看服务器时间,重新设置-----无效

2.修改mysql数据库时区

set global time_zone = Asia/Shanghai

重启数据库-重启服务-调用接口,接口返回2条数据,问题解决。

思考:

        解决这个问题废了很长时间,本地开发环境、测试环境都是正常的,只有生产环境会出现这个问题;而且通过日志输出的sql语句查询生产环境数据库是正常的,能查到数据,通过服务查询就不对了,让人摸不着头脑。

       碰巧新加了一条数据发现了数据库时区的问题,想着先解决了看看,结果正好解决了问题。其中的原理还是不太明白,在此记录一下,也希望知道原因的大神们帮忙解答🙏🙏🙏

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐