程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

SpringBoot mysql 时区问题

发布于2021-06-14 11:10     阅读(423)     评论(0)     点赞(3)     收藏(5)


寻找原因

后端开发中常见的几个时区设置

第一个设置点配置文件   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未定义

插入情况

 

再查询此条记录

 

 

个人觉得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,查出来就是库中数据。

 

 


4、serverTimezone为GMT,jackson.time-zone为GMT+8,time_zone为东3

serverTimeZone为格林尼治时间,web服务器为东八,所以直接推迟8小时

取出来刚好反一下,显示正常。

此时,修改serverTimeZone为东八。


5、时间字段类型为timestamp,使用默认current_timestamp,  serverTimezone为GMT,jackson.time-zone为GMT+8,time_zone为东3

因mysql时区东三时间为

插入后数据为

 

但是serverTimeZone为格林尼治时间,jackson.time-zone为东八,加8小时

 

 


6、时间字段类型为datetime,serverTimezone为GMT+8,jackson.time-zone为GMT+8,time_zone为东3

 

插入

库中

查询

 

time_zone从东3修改为东5

重新打开库

不启动SpringBoot

重启SpringBoot,还是一样。

 

修改serverTimeZone为GMT,其他不改动

查询

 

总结:

 

jackson.time-zone管前端到web服务器 转换的时区。

如果是时间类型为datetime,serverTimeZone说了算。

如果时间类型为timestamp

1、当time_zone和serverTimeZone不统一情况,会话中,表中时间数据,按照serverTimeZone设定

2、如果过程中,修改了time_zone变量,库中数据直接变更。但是不影响当前会话查询,新增数据,就会根据time_zone调整量,调整实际入库。

3、SpringBoot重启,其实就是新会话。情况同上_1。

 

 

 

原文链接:https://blog.csdn.net/zjy660358/article/details/117701956



所属网站分类: 技术文章 > 博客

作者:天花灯

链接:http://www.javaheidong.com/blog/article/222754/b9df13e0998d9119d881/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

3 0
收藏该文
已收藏

评论内容:(最多支持255个字符)