解决LocalDateTime.now()入数据库时间少8个小时

2021-08-14  本文已影响0人  dayue_

方式一:检查项目datasource的url配置项serverTimezone是否写了UTC,如果是的话要把serverTimezone=UTC换成serverTimezone=GMT%2B8

方式二:如果方式一换了也发现没用,然后项目持久层用的是JPA的话,检查是否加了该配置项 jpa.properties.hibernate.jdbc.time_zone: UTC,如果是的话,把该配置项删除。

方式三:datasource、持久层配置项检查无误,从数据库层面检查,如果是mysql的话,检查mysql的时区,可以用select now();查看当前数据库时间,如果少了8个小时,那就是数据库配置的问题了,mysql变量time_zone是数据库时间,time_zone默认是取变量system_time_zone系统时区,默认是为UTC,故我们要修改变量time_zone的值,修改mysql变量time_zone的值为+8:00,最后重启下项目,因为当前项目数据库连接池保留的session变量time_zone仍然为上一次的全局变量time_zone的值。

//查看当前数据库时间
select now();

//查看mysql变量%time_zone%
show variables like '%time_zone%';

// 查看全局变量time_zone和当前连接session变量time_zone
SELECT @@GLOBAL.time_zone, @@SESSION.time_zone;

//设置全局变量time_zone和当前session变量time_zone
set global time_zone = '+8:00';
set time_zone='+8:00';
上一篇下一篇

猜你喜欢

热点阅读