业务中有一个接口是查询当前时间前一天的数据,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语句查询生产环境数据库是正常的,能查到数据,通过服务查询就不对了,让人摸不着头脑。
碰巧新加了一条数据发现了数据库时区的问题,想着先解决了看看,结果正好解决了问题。其中的原理还是不太明白,在此记录一下,也希望知道原因的大神们帮忙解答