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

MySQL 時(shí)間類型的選擇

 更新時(shí)間:2021年06月05日 11:24:53   作者:島上碼農(nóng)  
MySQL 有多種類型存儲(chǔ)日期和時(shí)間,例如 YEAR 和 DATE。MySQL 的時(shí)間類型存儲(chǔ)的精確度能到秒(MariaDB 可以到毫秒級(jí))。但是,也可以通過(guò)時(shí)間計(jì)算達(dá)到毫秒級(jí)。時(shí)間類型的選擇沒(méi)有最佳,而是取決于業(yè)務(wù)需要如何處理時(shí)間的存儲(chǔ)。

MySQL 提供了 DATETIME 和 TIMESTAMP 兩種非常相似的類型處理日期和時(shí)間,大部分情況下兩種都是 OK 的,但是有些情況二者會(huì)互有優(yōu)劣。

DATETIME

DATETIME 的時(shí)間跨度更大,可以從1001年到9999年,精度是秒。并且存儲(chǔ)的格式是將日期和時(shí)間打包使用 YYYYMMDDhhmmss格式的整數(shù)存儲(chǔ),這個(gè)時(shí)間與時(shí)區(qū)無(wú)關(guān),需要占用8個(gè)字節(jié)的存儲(chǔ)空間。默認(rèn),MySQL 顯示 的DATETIME是有序的,明確的格式,例如2021-06-02 18:35:23。這是 ANSI 的標(biāo)準(zhǔn)日期時(shí)間格式。

TIMESTAMP

TIMESTAMP即時(shí)間戳,存儲(chǔ)的是自格林威治時(shí)間(GMT)1970年1月1日零點(diǎn)以來(lái)的秒數(shù)。和 Unix 系統(tǒng)的時(shí)間戳一樣。TIMESTAMP 僅需要4個(gè)字節(jié)存儲(chǔ),因此能夠表示的時(shí)間跨度更小,從1970年到2038年。MySQL 提供了 FROM_UNIXTIME 和 UNIX_TIMESTAMP 函數(shù)來(lái)完成時(shí)間戳和日期之間的轉(zhuǎn)換。

在 MySQL 4.1版本后,TIMESTAMP 顯示的格式和 DATETIME 類似,但是,TIMESTAMP 的顯示依賴于時(shí)區(qū)。MySQL 的服務(wù)端、操作系統(tǒng)以及客戶端連接都有時(shí)區(qū)的設(shè)置。因此,如果時(shí)間是從多個(gè)時(shí)區(qū)存儲(chǔ)的話,那 TIMESTAMP 和 DATETIME 的差別就會(huì)很大。TIMESTAMP 會(huì)保留使用時(shí)的時(shí)區(qū)信息,而 DATETIME 僅僅是使用文本表示時(shí)間。

TIMESTAMP 還有額外的特性。默認(rèn)地,MySQL會(huì)在沒(méi)有指定值的情況下使用當(dāng)前時(shí)間插入到 TIMESTAMP列,而更新的時(shí)候如果沒(méi)有指定值會(huì)使用當(dāng)前時(shí)間更新該字段,以下面的測(cè)試表為例:

CREATE TABLE t_time_test (
    id INT PRIMARY KEY,
    t_stamp TIMESTAMP,
    t_datetime DATETIME
);

可以看到MySQL 給的默認(rèn)值就是當(dāng)前時(shí)間戳 CURRENT_TIMESTAMP,并且有個(gè) ON UPDATE CURRENT_TIMESTAMP表示會(huì)隨之更新:

INSERT INTO t_time_test(id, t_datetime) VALUES
	(1, NULL), 
	(2, '2021-06-02 18:48:04'), 
	(3, NULL);

可以看到 t_stamp 列自動(dòng)填充了當(dāng)前時(shí)間。

這個(gè)特性使得我們可以物協(xié)程序維護(hù)數(shù)據(jù)更新時(shí)間字段,而交由 MySQL 完成。

如何選擇

從特性上看,可能會(huì)優(yōu)先選擇使用 TIMESTAMP 來(lái)存儲(chǔ)時(shí)間,相比 DATETIME 來(lái)說(shuō)更高效。也有些人使用整數(shù)存儲(chǔ) Unix 時(shí)間戳,實(shí)際上這種方式并不能獲益,而且整數(shù)還需要額外進(jìn)行處理,因此并不推薦這么做。但是一些情況需要注意不要使用 TIMESTAMP 存儲(chǔ)時(shí)間:

  • 生日:生日肯定會(huì)有早于1970年的,會(huì)超出 TIMESTAMP 的范圍
  • 有效期截止時(shí)間:TIMESTAMP 的最大時(shí)間是2038年,如果用來(lái)存類似身份證的有效期截止時(shí)間,營(yíng)業(yè)執(zhí)照的截止時(shí)間等就不合適。
  • 業(yè)務(wù)生存時(shí)間:互聯(lián)網(wǎng)時(shí)代講究快,發(fā)展(死得)快。如果要成為長(zhǎng)久存在的企業(yè),那么你的業(yè)務(wù)時(shí)間很可能在2038年還在繼續(xù)運(yùn)營(yíng),畢竟現(xiàn)在都2021年了。如果你覺(jué)得公司業(yè)務(wù)挺不到2038年,那沒(méi)關(guān)系。當(dāng)然,如果幸運(yùn)地挺到2038年,請(qǐng)務(wù)必寫下一條待辦事項(xiàng):到2038年1月1日前修改數(shù)據(jù)表時(shí)間戳字段類型。

如何存儲(chǔ)毫秒級(jí)時(shí)間

通常這個(gè)時(shí)候需要使用 BIGINT 來(lái)將時(shí)間轉(zhuǎn)換為整型存儲(chǔ),或者是使用浮點(diǎn)數(shù),用分?jǐn)?shù)部分表示秒精度一下的時(shí)間,這兩種方式都可行。當(dāng)然,這個(gè)時(shí)候需要應(yīng)用支持做格式轉(zhuǎn)換。

結(jié)語(yǔ)

從安全穩(wěn)妥的角度考慮,建議還是優(yōu)先選擇 DATETIME 類型,雖然相比 TIMESTAMP 會(huì)犧牲一點(diǎn)性能,但是 TIMESTAMP 的時(shí)間范圍是硬傷,不要埋下一個(gè)隱患,等到真的2038年,你的公司可能是上市公司的時(shí)候,程序員可能會(huì)遭遇洪水般的 bug 沖擊而不明所以,結(jié)果公司的股價(jià)迎來(lái)閃崩!然后找出來(lái)這個(gè)程序員,發(fā)現(xiàn)是曾經(jīng)公司的大神,目前的股東,已經(jīng)實(shí)現(xiàn)財(cái)務(wù)自由的你!你說(shuō)尷尬不尷尬?

以上就是MySQL 時(shí)間類型的選擇的詳細(xì)內(nèi)容,更多關(guān)于MySQL 時(shí)間類型的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL創(chuàng)建用戶以及用戶權(quán)限詳細(xì)圖文教程

    MySQL創(chuàng)建用戶以及用戶權(quán)限詳細(xì)圖文教程

    在MySQL中可以通過(guò)創(chuàng)建用戶來(lái)管理數(shù)據(jù)庫(kù)的訪問(wèn)權(quán)限,下面這篇文章主要給大家介紹了關(guān)于MySQL創(chuàng)建用戶以及用戶權(quán)限的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • MySQL無(wú)法重啟報(bào)錯(cuò)Warning: World-writable config file ‘/etc/my.cnf’ is ignored的解決方法

    MySQL無(wú)法重啟報(bào)錯(cuò)Warning: World-writable config file ‘/etc/my.cnf’

    最近在維護(hù)公司服務(wù)器的時(shí)候,在關(guān)閉數(shù)據(jù)庫(kù)的命令發(fā)現(xiàn)mysql關(guān)不了了,提示錯(cuò)誤為Warning: World-writable config file '/etc/my.cnf' is ignored,通過(guò)查找網(wǎng)上的資料終于解決了,現(xiàn)在將解決的方法分享給大家,同樣遇到這個(gè)問(wèn)題的朋友們可以參考借鑒。
    2016-12-12
  • 深入理解MySQL中的行級(jí)鎖

    深入理解MySQL中的行級(jí)鎖

    行級(jí)鎖加鎖規(guī)則比較復(fù)雜,不同的場(chǎng)景,加鎖的形式是不同的,本文主要介紹了深入理解MySQL中的行級(jí)鎖,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • 查看mysql語(yǔ)句運(yùn)行時(shí)間的2種方法

    查看mysql語(yǔ)句運(yùn)行時(shí)間的2種方法

    網(wǎng)站運(yùn)行很慢的時(shí)候,我就特別起知道為什么這么慢,所以我查啊查,數(shù)據(jù)庫(kù)絕對(duì)是很重要的一部分,里面運(yùn)行的sql是絕對(duì)不能放過(guò)的。平時(shí)做項(xiàng)目的時(shí)候,我也會(huì)注意sql語(yǔ)句的書寫,寫出一些高效的sql來(lái),所以我會(huì)經(jīng)常測(cè)試自己寫的sql語(yǔ)句。我把我知道的二個(gè)方法,總結(jié)一下發(fā)出來(lái)
    2014-01-01
  • MySQL監(jiān)控Innodb信息工作流程

    MySQL監(jiān)控Innodb信息工作流程

    這篇文章主要為大家介紹了MySQL監(jiān)控Innodb信息工作流程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-02-02
  • Mysql LONGBLOB 類型存儲(chǔ)二進(jìn)制數(shù)據(jù) (修改+調(diào)試+整理)

    Mysql LONGBLOB 類型存儲(chǔ)二進(jìn)制數(shù)據(jù) (修改+調(diào)試+整理)

    代碼來(lái)自網(wǎng)絡(luò),我學(xué)習(xí)整理了一下,測(cè)試通過(guò),下面的參數(shù)需要設(shè)置為你自己的
    2009-07-07
  • mysql觸發(fā)器簡(jiǎn)介、創(chuàng)建觸發(fā)器及使用限制分析

    mysql觸發(fā)器簡(jiǎn)介、創(chuàng)建觸發(fā)器及使用限制分析

    這篇文章主要介紹了mysql觸發(fā)器簡(jiǎn)介、創(chuàng)建觸發(fā)器及使用限制,結(jié)合實(shí)例形式分析了mysql觸發(fā)器的功能、原理、創(chuàng)建、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-12-12
  • MySQL表的基本查詢操作大全(這一篇夠了)

    MySQL表的基本查詢操作大全(這一篇夠了)

    表的增刪查改,簡(jiǎn)稱表的?CURD?操作?:?Create(創(chuàng)建),Update(更新),Retrieve(讀取),Delete(刪除),這篇文章主要介紹了MySQL表的基本查詢操作,感興趣的朋友一起看看吧
    2024-02-02
  • mysql數(shù)據(jù)庫(kù)如何轉(zhuǎn)移到oracle

    mysql數(shù)據(jù)庫(kù)如何轉(zhuǎn)移到oracle

    這篇文章主要介紹了mysql數(shù)據(jù)庫(kù)如何轉(zhuǎn)移到oracle,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • MySQL使用正則表達(dá)式去檢索指定數(shù)據(jù)庫(kù)字段

    MySQL使用正則表達(dá)式去檢索指定數(shù)據(jù)庫(kù)字段

    這篇文章主要介紹了MySQL使用正則表達(dá)式去檢索指定數(shù)據(jù)庫(kù)字段,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09

最新評(píng)論

苍梧县| 万州区| 锡林郭勒盟| 读书| 徐闻县| 德保县| 白水县| 东乌珠穆沁旗| 仪陇县| 天镇县| 华容县| 灵石县| 手游| 大石桥市| 阿拉善左旗| 小金县| 留坝县| 丘北县| 高平市| 台南县| 桃园市| 仙居县| 怀远县| 克什克腾旗| 泽州县| 合阳县| 丽水市| 莫力| 军事| 台江县| 防城港市| 肥城市| 长乐市| 台安县| 辛集市| 三江| 河西区| 方城县| 名山县| 新营市| 梁山县|