最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql之關(guān)于CST和GMT時(shí)區(qū)時(shí)間轉(zhuǎn)換方式

 更新時(shí)間:2023年10月12日 10:02:21   作者:飛廉灬少將  
這篇文章主要介紹了mysql之關(guān)于CST和GMT時(shí)區(qū)時(shí)間轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

問題

今天在往數(shù)據(jù)庫查詢一條數(shù)據(jù)時(shí)突然發(fā)現(xiàn)插入的時(shí)間竟然比系統(tǒng)時(shí)間少了13個(gè)小時(shí)。。。

然后因?yàn)椴迦霑r(shí)間的問題延伸出之前寫的SQL中只要涉及到創(chuàng)建時(shí)間都有可能存在,也就是某月1號(hào)插入的數(shù)據(jù),你在統(tǒng)計(jì)時(shí),當(dāng)月并未統(tǒng)計(jì),實(shí)際上是在上個(gè)月的統(tǒng)計(jì)數(shù)據(jù)中。。。。

這就尷尬了。。。

排查

1、首先查證測(cè)試環(huán)境數(shù)據(jù)庫時(shí)區(qū):

SHOW VARIABLES LIKE ‘%time_zone%'

竟然設(shè)置的CST時(shí)區(qū),之前不是啊,之后詢問主管才得知,當(dāng)前改造的老項(xiàng)目生產(chǎn)環(huán)境的數(shù)據(jù)庫使用的CST。。。

為了保證測(cè)試一致性,就修改了數(shù)據(jù)庫時(shí)區(qū)。。。

到此,直接找到時(shí)間相差13個(gè)小時(shí)的原因。。。。

解決

既然知道時(shí)間差,也知道時(shí)區(qū)了,那么問題就好解決了,

mysql中有一個(gè)函數(shù)CONVERT_TZ() 可以解決這個(gè)問題(這里為了更直觀,直接貼圖)

通過這條SQL查詢出來的時(shí)間

SELECT report_id,create_time FROM report_item WHERE report_id=2584

結(jié)果:

上圖中的時(shí)間就是CST時(shí)區(qū)時(shí)間,單實(shí)際上系統(tǒng)時(shí)間是:2021-05-21 10:05:12,相差足足13個(gè)小時(shí)

所以SQL修改為:

SELECT report_id,CONVERT_TZ(create_time, 'UTC','+13:00') as create_time FROM report_item WHERE report_id=2584

到這里,基本完美解決了時(shí)區(qū)轉(zhuǎn)換問題,后來度娘了一下這個(gè)問題,發(fā)現(xiàn)CST和GMT時(shí)間相差是13或14小時(shí),至于是13小時(shí)還是14小時(shí),取決于你傳遞給數(shù)據(jù)庫的時(shí)間

函數(shù)介紹:CONVERT_TZ(dt,from_tz,to_tz)

轉(zhuǎn)換datetime值dt,從 from_tz 由給定轉(zhuǎn)到 to_tz 時(shí)區(qū)給出的時(shí)區(qū),并返回的結(jié)果值。

如果參數(shù)無效該函數(shù)返回NULL。

示例

yyyy-MM-dd格式

SELECT CONVERT_TZ('2021-5-21 15:30:00','UTC','+13:00') AS 北京時(shí)間;

這里注意一點(diǎn),我的SQL時(shí)區(qū)是CST,但是我在這里用的UTC來作為標(biāo)準(zhǔn)時(shí)間,所以可以理解CST-UTC-GMT,所以最后我用了+13:00,這里也可能會(huì)有人問為什么不直接用CST來轉(zhuǎn),這個(gè)嘛。。。

可能是我mysql版本問題?

我直接寫CST,竟然返回給我一個(gè)null。。。尷尬。。。

使用這樣的寫法可以解決現(xiàn)在的問題,但是最重要的一點(diǎn)就是從根源上去解決,不要去給數(shù)據(jù)庫設(shè)置默認(rèn)時(shí)區(qū),如果一定要,那設(shè)置GMT或者UTC都可以,不用使用CST時(shí)區(qū),因?yàn)檫@個(gè)時(shí)區(qū)存在很多很多的問題,這里就不意義贅述了。。。

大家可以去找度娘要關(guān)于CST時(shí)區(qū)的問題

總結(jié)

1、數(shù)據(jù)庫時(shí)區(qū)最好不要設(shè)置成CST,以免出現(xiàn)上面的錯(cuò)誤

2、當(dāng)數(shù)據(jù)庫中的時(shí)間用的是時(shí)間類型時(shí)候,Java中可以用String,但是這種做法不是很國際化

3、在數(shù)據(jù)庫連接字符串中設(shè)置時(shí)區(qū)。

推薦這種方式,如下:

jdbc:mysql://xxxx:3306/table_name?serverTimezone=Asia/ShanghaiallowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 從數(shù)據(jù)庫中取出最近三十天的數(shù)據(jù)并生成柱狀圖

    從數(shù)據(jù)庫中取出最近三十天的數(shù)據(jù)并生成柱狀圖

    從數(shù)據(jù)庫中取出最近三十天的數(shù)據(jù)并生成柱狀圖的代碼,需要的朋友可以參考下。
    2011-05-05
  • 最新評(píng)論

    安龙县| 泰兴市| 临朐县| 木兰县| 杂多县| 仪征市| 舞钢市| 吉隆县| 陆丰市| 温宿县| 宜宾市| 台北市| 栾城县| 麻阳| 广平县| 凉城县| 三都| 汶上县| 开化县| 东丰县| 西青区| 恩施市| 阿克苏市| 顺义区| 阳信县| 如皋市| 黄平县| 余庆县| 正镶白旗| 普宁市| 墨江| 鄂尔多斯市| 衢州市| 冀州市| 松溪县| 武宣县| 邯郸县| 黑水县| 宜兰县| 潮州市| 襄汾县|