亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL時(shí)區(qū)差8小時(shí)的多種問題解決方法

 更新時(shí)間:2024年01月05日 11:29:29   作者:笑小楓  
mybatis將本地的數(shù)據(jù)傳入到mysql數(shù)據(jù)庫服務(wù)器的時(shí)候,服務(wù)器會(huì)對(duì)數(shù)據(jù)進(jìn)行檢測(cè),會(huì)把date類型的數(shù)據(jù)自動(dòng)轉(zhuǎn)換為mysql服務(wù)器所對(duì)應(yīng)的時(shí)區(qū),即0時(shí)區(qū),所以會(huì)相差8小時(shí),本文給大家介紹了MySQL時(shí)區(qū)差8小時(shí)的問題解決方法,需要的朋友可以參考下

背景

最近在開發(fā)【Java面試 | 笑小楓】小程序,便發(fā)現(xiàn)老是有人半夜偷偷刷題,如下圖所示:

image-20230321205840646

現(xiàn)在都這么卷了嗎?大半夜的都不睡覺了嗎?還在擼題~越想越不對(duì),趕緊看了一下,發(fā)現(xiàn)自己錄入題目的時(shí)間也好多都在凌晨。

好家伙,秒懂,時(shí)區(qū)錯(cuò)了。錯(cuò)就錯(cuò)了吧,影響也不大。

直到現(xiàn)在出現(xiàn)了每日簽到的功能,好吧順手改一下,反正也不難。都改了,順手整理篇博客吧。

知識(shí)點(diǎn)

UTC:Coordinated Universal Time 協(xié)調(diào)世界時(shí)。

GMT:Greenwich Mean Time 格林尼治標(biāo)準(zhǔn)時(shí)間。(在協(xié)調(diào)世界時(shí)意義上的0時(shí)區(qū),即GMT = UTC+0)

中國的時(shí)間是【東八區(qū)】,比GMT多八個(gè)小時(shí),即 GMT+8(或UTC+8,但習(xí)慣上還是用GMT+8)

代碼中常見的三種時(shí)間差錯(cuò)問題

【我遇到的】本地獲取的時(shí)間沒有錯(cuò),存入數(shù)據(jù)庫的時(shí)候時(shí)間相差8小時(shí)

mybatis將本地的數(shù)據(jù)傳入到mysql數(shù)據(jù)庫服務(wù)器的時(shí)候,服務(wù)器會(huì)對(duì)數(shù)據(jù)進(jìn)行檢測(cè),會(huì)把date類型的數(shù)據(jù)自動(dòng)轉(zhuǎn)換為mysql服務(wù)器所對(duì)應(yīng)的時(shí)區(qū),即0時(shí)區(qū),所以會(huì)相差8小時(shí)。

解決方案:

  • 在數(shù)據(jù)庫鏈接上添加serverTimezone=GMT%2B8

image-20230321214129614

java下使用 new date()獲取的時(shí)間會(huì)和真實(shí)的本地時(shí)間相差8小時(shí)

new date()調(diào)用的是jvm時(shí)間,而jvm使用的時(shí)間默認(rèn)是0時(shí)區(qū)的時(shí)間,即:和北京時(shí)間將會(huì)相差8小時(shí)。

解決方案:

  • 手動(dòng)設(shè)置jvm時(shí)間:將時(shí)間改為第8時(shí)區(qū)的時(shí)間:
  • 如果是springboot項(xiàng)目,可以面向切面加上這個(gè),或者啟動(dòng)main類上加上如下代碼:
TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));

數(shù)據(jù)庫時(shí)間沒有錯(cuò),獲取到了后端,之后返回給前端相差8小時(shí)

springboot中對(duì)加了@RestController或者@Controller+@ResponseBody注解的方法的返回值默認(rèn)是Json格式,所以,對(duì)date類型的數(shù)據(jù),在返回瀏覽器端時(shí),會(huì)被springboot默認(rèn)的Jackson框架轉(zhuǎn)換,而Jackson框架默認(rèn)的時(shí)區(qū)GMT(相對(duì)于中國是少了8小時(shí))。所以最終返回到前端結(jié)果是相差8小時(shí)。

解決方案:

  • 將spring的json構(gòu)造器的時(shí)區(qū)改正即可,在application.yml文件中添加:
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
  • 可以使用注解,在entity實(shí)體類的date數(shù)據(jù)上添加注解,那么數(shù)據(jù)庫傳回的data數(shù)據(jù)要轉(zhuǎn)換為json格式的時(shí)候就是北京時(shí)間了,再次傳回到前端的時(shí)候,也不會(huì)出現(xiàn)時(shí)區(qū)問題。
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
private Date updateDate;

數(shù)據(jù)庫代碼時(shí)區(qū)的問題

以上說的都是代碼中時(shí)間的問題,還有一種情況,就是sql使用NOW()獲取時(shí)間,這種寫法太可惡了。強(qiáng)烈不推薦

這種情況使用的是數(shù)據(jù)庫的時(shí)間,首先我們看一下數(shù)據(jù)庫時(shí)間

select NOW();

image-20230321215559765

如果和當(dāng)前時(shí)間一致,那么恭喜你,沒問題。

如果比當(dāng)前時(shí)間少8小時(shí),那么依舊恭喜你,你穿越了。

言歸正傳,如果比當(dāng)前時(shí)間少8小時(shí),該怎么處理呢?

通過Sql命令修改,臨時(shí)生效

本方法的優(yōu)點(diǎn)是,生效快,不需要重啟數(shù)據(jù)庫;缺點(diǎn)是重啟數(shù)據(jù)庫后配置失效。

首先檢查下Mysql系統(tǒng)時(shí)區(qū)

show variables like '%time_zone%';

image-20230321215721287

設(shè)置時(shí)區(qū)

-- 修改mysql全局時(shí)區(qū)為北京時(shí)間,即我們所在的東8區(qū)
set global time_zone = '+08:00'; 

-- 修改當(dāng)前會(huì)話時(shí)區(qū),不然需要重新打開會(huì)話才會(huì)生效
set time_zone = '+08:00';

立即刷新生效

flush privileges;

然后再執(zhí)行一下我們的select NOW();查看一下時(shí)間,OK,時(shí)間一致

image-20230321220030720

通過配置文件來進(jìn)行修改,永久性生效

本方法的優(yōu)點(diǎn)是永久性生效,缺點(diǎn)是需要重啟數(shù)據(jù)庫

修改mysql的配置文件。linux系統(tǒng)上是my.cnf文件,window系統(tǒng)是my.ini

在[mysqld]區(qū)域中加上 default-time_zone = ‘+8:00’

重啟mysql使新時(shí)區(qū)生效

總結(jié)

本文到這里就結(jié)束了??偨Y(jié)一下吧

代碼中常見的數(shù)據(jù)問題是,程序中正常,保存到數(shù)據(jù)庫中差8小時(shí),這種情況用在數(shù)據(jù)庫連接中添加serverTimezone=GMT%2B8Java下使用 new date()獲取的時(shí)間會(huì)和真實(shí)的本地時(shí)間相差8小時(shí),這個(gè)需要修改JVM時(shí)區(qū),正常很少見數(shù)據(jù)庫時(shí)間沒有錯(cuò),獲取到了后端,之后返回給前端相差8小時(shí),可以通過設(shè)置json轉(zhuǎn)換的時(shí)區(qū)來進(jìn)行調(diào)整修改數(shù)據(jù)庫的時(shí)區(qū),可以通過命令臨時(shí)修改和通過配置文件永久性修改

以上就是MySQL時(shí)區(qū)差8小時(shí)的問題解決方法的詳細(xì)內(nèi)容,更多關(guān)于MySQL時(shí)區(qū)差8小時(shí)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL到Kafka實(shí)時(shí)數(shù)據(jù)同步

    MySQL到Kafka實(shí)時(shí)數(shù)據(jù)同步

    很多 DBA 同學(xué)經(jīng)常會(huì)遇到要從一個(gè)數(shù)據(jù)庫實(shí)時(shí)同步到另一個(gè)數(shù)據(jù)庫的問題,同構(gòu)數(shù)據(jù)還相對(duì)容易,遇上異構(gòu)數(shù)據(jù)、表多、數(shù)據(jù)量大等情況就難以同步,我自己親測(cè)了一種方式,可以非常方便的實(shí)現(xiàn)MySQL Kafka實(shí)時(shí)數(shù)據(jù)同步,需要的朋友可以參考下
    2024-01-01
  • MYSQL 刪除一個(gè)字段前判斷字段是否存在的辦法

    MYSQL 刪除一個(gè)字段前判斷字段是否存在的辦法

    這篇文章主要介紹了MYSQL 刪除一個(gè)字段前判斷字段是否存在的辦法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-08-08
  • Mysql如何查詢鎖表

    Mysql如何查詢鎖表

    這篇文章主要介紹了Mysql如何查詢鎖表問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Ubuntu下完美實(shí)現(xiàn)遷移MySQL數(shù)據(jù)庫位置

    Ubuntu下完美實(shí)現(xiàn)遷移MySQL數(shù)據(jù)庫位置

    這篇文章主要介紹了Ubuntu下完美實(shí)現(xiàn)遷移MySQL數(shù)據(jù)庫位置,十分詳細(xì),有需要的小伙伴可以參考下
    2015-03-03
  • MAC下Mysql5.7+ MySQL Workbench安裝配置方法圖文教程

    MAC下Mysql5.7+ MySQL Workbench安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了MAC下Mysql5.7+ MySQL Workbench安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • MySQL為JSON字段創(chuàng)建索引方式(Multi-Valued?Indexes?多值索引)

    MySQL為JSON字段創(chuàng)建索引方式(Multi-Valued?Indexes?多值索引)

    這篇文章主要介紹了MySQL為JSON字段創(chuàng)建索引方式(Multi-Valued?Indexes?多值索引),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • mysql如何動(dòng)態(tài)創(chuàng)建連續(xù)時(shí)間段

    mysql如何動(dòng)態(tài)創(chuàng)建連續(xù)時(shí)間段

    這篇文章主要介紹了mysql如何動(dòng)態(tài)創(chuàng)建連續(xù)時(shí)間段問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • SQL HAVING子句在GROUP BY中的條件篩選靈活運(yùn)用

    SQL HAVING子句在GROUP BY中的條件篩選靈活運(yùn)用

    這篇文章主要為大家介紹了SQL HAVING子句在GROUP BY中的條件篩選靈活運(yùn)用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Mysql百萬級(jí)分頁優(yōu)化技巧

    Mysql百萬級(jí)分頁優(yōu)化技巧

    這篇文章主要介紹了Mysql百萬級(jí)分頁優(yōu)化技巧,包括普通分頁和優(yōu)化分頁兩種,在數(shù)據(jù)量比較大的時(shí)候,我們盡量去利用索引來優(yōu)化語句。下面通過本文給大家詳細(xì)講解,一起看看吧
    2016-12-12
  • mysql使用instr達(dá)到in(字符串)的效果

    mysql使用instr達(dá)到in(字符串)的效果

    本文主要介紹了mysql使用instr達(dá)到in(字符串)的效果,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04

最新評(píng)論