關(guān)于SpringBoot mysql數(shù)據(jù)庫時(shí)區(qū)問題
尋找原因
后端開發(fā)中常見的幾個(gè)時(shí)區(qū)設(shè)置
第一個(gè)設(shè)置點(diǎn)配置文件 spring.jackson.time-zone
第二個(gè)設(shè)置點(diǎn) 高版本SpringBoot版本 mysql-connector-java 用的是8.X,mysql8.X的jdbc升級(jí)了,增加了時(shí)區(qū)(serverTimezone)屬性,并且不允許為空。
第三個(gè)設(shè)置點(diǎn) mysql time_zone變量
詞義
serverTimezone臨時(shí)指定mysql服務(wù)器的時(shí)區(qū)
spring.jackson.time-zone 設(shè)置spring默認(rèn)時(shí)區(qū)
system_time_zone mysql服務(wù)器時(shí)區(qū) ,time_zone默認(rèn)System追隨system_time_zone
幾種情況
1、time_zone 為 System,serverTimezone為GMT+8,jackson.time-zone未定義

插入情況



再查詢此條記錄

個(gè)人覺得Spring默認(rèn)時(shí)區(qū)為格林尼治時(shí)區(qū),web服務(wù)器當(dāng)前時(shí)區(qū)為東八區(qū),進(jìn)行加8操作。
2、set GLOBAL time_zone = '+3:00',serverTimezone為GMT+8,jackson.time-zone為GMT+8
createTime 為 timestamp類型

修改配置后,需要重啟SpringBoot
新增情況

數(shù)據(jù)庫中顯示

查詢記錄

個(gè)人理解,serverTimezone設(shè)置覆蓋掉了mysql的time_zone變量,跟SpringBoot回話時(shí)區(qū)還是東8
3、上述環(huán)境,不重啟SpringBoot,直接改變time_zone = '+5:00'
改變后,上條記錄往后調(diào)整2小時(shí)。

SpringBoot查詢,一樣

說明,timeStamp類型存儲(chǔ)的是格林尼治時(shí)間,加上time_zone時(shí)區(qū)
當(dāng)time_zone變化時(shí),回話沒結(jié)束,serverTimeZone東8還是對(duì)應(yīng)time_zone的東3
SpringBoot插入


個(gè)人理解,serverTimeZone東8 還是和 time_zone 東3對(duì)應(yīng),但是插入發(fā)現(xiàn) 當(dāng)前time_zone已經(jīng)改成東5,就加2小時(shí)。
重啟SpringBoot,重新查詢


雖然,mysql變量time_zone為+5,但是重啟后,serverTimeZone直接覆蓋,設(shè)置時(shí)間區(qū)間為東8
重新把time_zone改回東3

改回重新打開表,發(fā)現(xiàn)又回來了
不啟動(dòng)SpringBoot,查詢數(shù)據(jù),還是老樣子

此時(shí),添加一條數(shù)據(jù)。

往前推了2小時(shí)。
![]()
SpringBoot查詢

重啟SpringBoot,查出來就是庫中數(shù)據(jù)。

總結(jié):
1、timeStamp類型存儲(chǔ)時(shí)間數(shù)據(jù),當(dāng)time_zone和serverTimeZone不統(tǒng)一情況,會(huì)話中,表中時(shí)間數(shù)據(jù),按照serverTimeZone設(shè)定
2、如果過程中,修改了time_zone變量,庫中數(shù)據(jù)直接變更。但是不影響當(dāng)前會(huì)話查詢,新增數(shù)據(jù),就會(huì)根據(jù)time_zone調(diào)整量,調(diào)整實(shí)際入庫。
3、SpringBoot重啟,其實(shí)就是新會(huì)話。情況同上。
4、時(shí)間字段類型為datetime,serverTimezone為GMT+8,jackson.time-zone為GMT+8,time_zone為東3
插入

庫中

查詢

time_zone從東3修改為東5
重新打開庫

不啟動(dòng)SpringBoot

重啟SpringBoot,還是一樣。
修改serverTimeZone為GMT,其他不改動(dòng)


查詢

總結(jié):如果是datetime類型,serverTimeZone說了算。
以上就是關(guān)于SpringBoot mysql數(shù)據(jù)庫時(shí)區(qū)問題的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot mysql時(shí)區(qū)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 深入詳解SpringBoot中時(shí)區(qū)問題解決與配置方案
- SpringBoot時(shí)區(qū)問題解決以及徹底解決時(shí)差問題
- springboot項(xiàng)目如何設(shè)置時(shí)區(qū)
- 如何解決springboot數(shù)據(jù)庫查詢時(shí)出現(xiàn)的時(shí)區(qū)差異問題
- SpringBoot如何根據(jù)用戶系統(tǒng)時(shí)區(qū)動(dòng)態(tài)展示時(shí)間
- springboot如何統(tǒng)一設(shè)置時(shí)區(qū)
- SpringBoot中?Jackson?日期的時(shí)區(qū)和日期格式問題解決
- SpringBoot:JPA + AuditingEntityListener時(shí)區(qū)設(shè)置方式
- SpringBoot時(shí)區(qū)設(shè)置的幾個(gè)方面小結(jié)
相關(guān)文章
SpringBoot?AOP中JoinPoint的使用方式和通知切點(diǎn)表達(dá)式
這篇文章主要介紹了SpringBoot?AOP中JoinPoint的使用方式和通知切點(diǎn)表達(dá)式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
Java對(duì)象在內(nèi)存中的布局是如何實(shí)現(xiàn)的?
Java對(duì)象在內(nèi)存中屬于oop-klass二分模型,即對(duì)象的實(shí)例數(shù)據(jù)和對(duì)象類型的元數(shù)據(jù)(字段定義、方法、常量池等元數(shù)據(jù))是分開存儲(chǔ)的.而由于JVM對(duì)對(duì)象內(nèi)相同寬度的字段分配在一起,所以只要指定了字段類型分配的順序,就可以計(jì)算出每種類型字段相對(duì)于當(dāng)前對(duì)象的偏移起始位置2021-06-06
MyBatis-Plus數(shù)據(jù)權(quán)限插件的簡(jiǎn)單使用
在MyBatis-Plus中,通過DataPermissionInterceptor插件實(shí)現(xiàn)數(shù)據(jù)權(quán)限控制,首先需要?jiǎng)?chuàng)建自定義注解和處理類,利用JSQLParser庫動(dòng)態(tài)修改SQL,實(shí)現(xiàn)按角色權(quán)限過濾數(shù)據(jù),配置類中注冊(cè)攔截器,確保只有授權(quán)用戶能訪問指定數(shù)據(jù),感興趣的可以了解一下2024-10-10
Java?-jar運(yùn)行jar包時(shí)可添加參數(shù)示例詳解
這篇文章主要給大家介紹了Java?-jar運(yùn)行jar包時(shí)可添加參數(shù)的相關(guān)資料,包括設(shè)置JAR文件、系統(tǒng)屬性、JVM參數(shù)、Spring?Profiles、配置文件位置和名稱,以及傳遞給應(yīng)用程序的參數(shù),需要的朋友可以參考下2025-05-05
springboot+webmagic實(shí)現(xiàn)java爬蟲jdbc及mysql的方法
今天小編就為大家分享一篇springboot+webmagic實(shí)現(xiàn)java爬蟲jdbc及mysql的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-08-08
解決swaggerUI頁面沒有顯示Controller方法的坑
這篇文章主要介紹了解決swaggerUI頁面沒有顯示Controller方法的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06

