问题描述
还是工程实践2中遇到的。
先判断是数据库时区的问题,还是项目配置的问题。方法如下:
show VARIABLES like '%time_zone%';
select now();
通过Navicat执行上面的语句得出的结果显示,MySQL所使用的时区是系统时区,则应该是项目配置问题,而不是数据库时区问题。前端或者后端插入数据时,时间就会差8个小时,到这就可以确定是项目配置问题了。
解决方案
如果是数据库时区问题,可以通过下语句设置MySQL时区
set global time_zone = '+8:00'; -- 修改MySQL全局时区为北京时间,即我们所在的东8区
flush privileges; -- 立即生效
如果是项目配置问题,那就找到jdbc url修改一下,将其中serverTimezone
的值改成Asia/Shanghai
。
例如spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mytest?allowPublicKeyRetrieval=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false。
补充
大多数教程里写的是serverTimezone=UTC,所以会有一部分人遇到这个坑。通常是萌新会遇到(没错就是我),毕竟教程嘛。