SpringBoot mysql 时区问题总结_servertimezone=gmt+8-程序员宅基地

技术标签: serverTimeZone  time_zone  time-zone  DB  

寻找原因

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

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zjy660358/article/details/117701956

智能推荐

程序员有多难撩?网友:已读不回的都是渣男?-程序员宅基地

文章浏览阅读377次。作为打工人,相信很多小伙伴都有过这样的经历,在求职平台上主动给HR发消息,却总是“已读不回”.... 是HR 没有看到吗?还是HR觉得我不合适呢?但是,最近播妞在某平台上看到,有位公司的猎..._程序员 渣男

chrome浏览器解码H265视频方法_chrome h265-程序员宅基地

文章浏览阅读1.9k次,点赞12次,收藏12次。项目系统的视频分析模块用户电脑无法使用浏览器打开。_chrome h265

攻防世界 --> funny_video --> 最完整和正确的解答-程序员宅基地

文章浏览阅读768次,点赞2次,收藏2次。攻防世界 --> funny_video --> 最完整和正确的解答_funny_video

P3435 [POI2006]OKR-Periods of Words(KMP最短公共前后缀)_前缀后缀最短公共元素-程序员宅基地

文章浏览阅读2.3k次,点赞4次,收藏22次。传送门一个字符串sss的贡献定义为最长的真前缀(不等于原串)xxx长度使得sss是x+xx+xx+x的前缀(可以等于原串)考虑只求一个字符串的贡献,最长的xxx满足[1,n][1,n][1,n]是[1,x]+[1,x][1,x]+[1,x][1,x]+[1,x]的前缀等价于[x+1,n][x+1,n][x+1,n]是[1,x][1,x][1,x]的前缀我们要使xxx尽可能大,就要让匹配的后缀尽量小也就是需要求一个最短公共前后缀那完了啊,最长公共前后缀用kmpkmpkmp,最短咋办…别急,既_前缀后缀最短公共元素

Code First笔记_code first maxlength和stringlength-程序员宅基地

文章浏览阅读353次。EF 6 Code-First 约定约定是一组默认规则,在使用代码优先方法时,它们会根据域类自动配置概念模型。可以使用DataAnnotation或Fluent API重写这些约定。注意:EF 6不包括一对一和多对多关系的默认约定。需要使用Fluent API或DataAnnotation对它们进行配置。Schema : 默认情况下,EF将所有DB对象创建到dbo模式中。Table Name : <实体类名> + ‘s’ EF将创建一个以“s”为后缀的实体类名的DB表。例如Student_code first maxlength和stringlength

ASP.NET服务端不装Office 操作Excel NPOI 3_.net excel类库 不需要安装office-程序员宅基地

文章浏览阅读2.7k次。作者:Tony QuNPOI官方网站:http://npoi.codeplex.com/ 在Excel中我们经常要设置格式,比如说日期格式(yyyymmdd)、小数点格式(1.20)、货币格式($2000)、百分比格式(99.99%)等等,这些东西在过去我们恐怕只能在服务器端生成好,不但增加了服务器端的代码量,还造成了不必要的字符串替换操作,如今NPOI将让服务器从这种完全_.net excel类库 不需要安装office

随便推点

清空缓存区的方法_清空暂存区-程序员宅基地

文章浏览阅读515次,点赞8次,收藏11次。标准输入。_清空暂存区

【深度学习】神经网络的可视化解释!-程序员宅基地

文章浏览阅读2.9k次。来自联盟学习笔记AI博士笔记系列推荐第一个卷积神经网络是Alexander Waibel在1987年提出的时延神经网络(TDNN)[5]。TDNN是应用于语音识别问题的卷积神经网络。它使..._shift-invariant pattern recognition neural network and its optical architect

MFC实现ktv点歌系统(附完整源码)_基于wpf的ktv点歌系统源码-程序员宅基地

文章浏览阅读305次。MFC实现ktv点歌系统(附完整源码)_基于wpf的ktv点歌系统源码

VC2008 express编译QT4.5-程序员宅基地

文章浏览阅读86次。最新的QT4.5发布了,增加了LGPL2.1协议,实在是众望所归啊。。。参考资料:1、【转贴】VC 2005 下如何编译安装并开发 QT 4.4.0 应用程序2、qt4:qt编译安装信息的解读3、qt4:windows下编译qt 4.3.24、网友已编译好的Qt开源版下载(含Debug库)(主要是参考它的configure参数)还有QT安装目录下的“ install ”文件一、下载...

表值函数和标量值函数_.net7 中如何使用表值函数-程序员宅基地

文章浏览阅读2k次。 Sql server 的表值函数是返回一个Table类型,table类型相当与一张存储在内存中的一张虚拟表。实现表值函数很简单:下面是一个不带输入参数的表值函数create function tvpoints()returns tableas return(select * from tb_users); 这个表值函数数查询所有用户表的数据对于多语句_.net7 中如何使用表值函数

ARKit_arkit 实时显示关键点-程序员宅基地

文章浏览阅读597次。为什么ARKit是AR的最好选择?苹果在最近举办的WWDC上发布的ARKit已经对增强现实技术(AR)产生了巨大的影响. 开发者首次发现, 一个强大而大范围可用的AR软件开发包“恰好”适用于他们的app. 它不需要对标记、初始化、深度照相机和专用的创建工具进行修改. 不出所料, 大量的演示随之而来(可以关注推特@madewitharkit获取更新信息). 但是大部分开发者都不知道ARKit的工作原理_arkit 实时显示关键点