关于SpringBootmysql数据库时区问题
寻原因
后端开发中常见的⼏个时区设置
第⼀个设置点配置⽂件 spring.jackson.time-zone
第⼆个设置点⾼版本SpringBoot版本 mysql-connector-java ⽤的是8.X,mysql8.X的jdbc升级了,增加了时区(serverTimezone)属性,并且不允许为空。
第三个设置点 mysql time_zone变量
词义
serverTimezone临时指定mysql服务器的时区
spring.jackson.time-zone 设置spring默认时区
system_time_zone mysql服务器时区,time_zone默认System追随system_time_zone
⼏种情况
1、time_zone 为 System,serverTimezone为GMT+8,jackson.time-zone未定义
插⼊情况
springboot其实就是spring
再查询此条记录
个⼈觉得Spring默认时区为格林尼治时区,web服务器当前时区为东⼋区,进⾏加8操作。
2、set GLOBAL time_zone = '+3:00',serverTimezone为GMT+8,jackson.time-zone为GMT+8 createTime 为 timestamp类型
修改配置后,需要重启SpringBoot
新增情况
数据库中显⽰
查询记录
个⼈理解,serverTimezone设置覆盖掉了mysql的time_zone变量,跟SpringBoot回话时区还是东8 3、上述环境,不重启SpringBoot,直接改变time_zone = '+5:00'
改变后,上条记录往后调整2⼩时。
SpringBoot查询,⼀样
说明,timeStamp类型存储的是格林尼治时间,加上time_zone时区
当time_zone变化时,回话没结束,serverTimeZone东8还是对应time_zone的东3
SpringBoot插⼊
个⼈理解,serverTimeZone东8 还是和 time_zone 东3对应,但是插⼊发现当前time_zone已经改成东5,就加2⼩时。重启SpringBoot,重新查询
虽然,mysql变量time_zone为+5,但是重启后,serverTimeZone直接覆盖,设置时间区间为东8
重新把time_zone改回东3
改回重新打开表,发现⼜回来了
不启动SpringBoot,查询数据,还是⽼样⼦
此时,添加⼀条数据。
往前推了2⼩时。
SpringBoot查询
重启SpringBoot,查出来就是库中数据。
总结:
1、timeStamp类型存储时间数据,当time_zone和serverTimeZone不统⼀情况,会话中,表中时间数据,按照serverTimeZone设定
2、如果过程中,修改了time_zone变量,库中数据直接变更。但是不影响当前会话查询,新增数据,就会根据time_zone调整量,调整实际⼊库。
3、SpringBoot重启,其实就是新会话。情况同上。
4、时间字段类型为datetime,serverTimezone为GMT+8,jackson.time-zone为GMT+8,time_zone为东3
插⼊
库中
查询
time_zone从东3修改为东5
重新打开库
不启动SpringBoot
重启SpringBoot,还是⼀样。
修改serverTimeZone为GMT,其他不改动
查询
总结:如果是datetime类型,serverTimeZone说了算。
以上就是关于SpringBoot mysql数据库时区问题的详细内容,更多关于SpringBoot mysql时区的资料请关注其它相关⽂章!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论