今天在spring boot 项目中遇到在使用mybatis-generator自动生成的Example进行保存用户信息时,发现存储在数据库中的创建时间和实际时间相差14个小时;下面记录一下问题出现的原因和解决的方法。
spring boot mybatis 日期转化的时区和数据库时区不一致导致。
show variables like '%time_zone%';
# 查询显示结果:
# system_time_zone: CST
# time_zone:SYSTEM
CST
可为4个不同时区的缩写,可参考CST
猜想:com.mysql.cj.jdbc.Driver
转化sql的时候使用的时区是美国中部时间 UTC-06:00
猜想:mysql数据库使用的是默认当地时区也就是中国标准时间 UTC+08:00
这样相加就可以得出时间相差14个小时
set global time_zone = '+08:00';
set time_zone = '+08:00';
设置成功后需要重启数据库
spring.datasource.url=jdbc:mysql://localhost:3306/test?useTimezone=true&serverTimezone=GMT%2B8
意思是链接数据库的时候就设置时区UTC+8