问题描述
今天在 spring boot 项目中遇到在使用 mybatis-generator 自动生成的 Example 进行保存用户信息时,发现存储在数据库中的创建时间和实际时间相差 14 个小时;下面记录一下问题出现的原因和解决的方法。
出现问题原因
spring boot mybatis 日期转化的时区和数据库时区不一致导致。
1. 查询数据库时区
show variables like '%time_zone%';
# 查询显示结果:
# system_time_zone: CST
# time_zone:SYSTEM
CST
可为 4 个不同时区的缩写,可参考 CST
2. 猜想 spring boot mybatis 转化日期格式使用的时区
猜想:com.mysql.cj.jdbc.Driver
转化 sql 的时候使用的时区是美国中部时间 UTC-06:00
猜想:mysql 数据库使用的是默认当地时区也就是中国标准时间 UTC+08:00
这样相加就可以得出时间相差 14 个小时
3. 解决方法
- 修改数据库时区,需要重启数据库
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
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于