mysql时区问题导致查询业务无法查询到数据

问题表现

业务中有一个接口是查询当前时间前一天的数据,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语句查询生产环境数据库是正常的,能查到数据,通过服务查询就不对了,让人摸不着头脑。

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

你可能感兴趣的:(sql,数据库,java,后端)