MySQL的日期類型簡介
在 MySQL 中有兩種存儲(chǔ)時(shí)間的數(shù)據(jù)類型 DATETIME
和 TIMESTAMP
,它們?cè)跀?shù)據(jù)庫實(shí)際應(yīng)用中,各有各的優(yōu)勢(shì)和劣勢(shì)。
一. DATETIME 和 TIMESTAMP 的相同點(diǎn)
- 兩個(gè)數(shù)據(jù)類型存儲(chǔ)時(shí)間的格式一致。均為 YYYY-MM-DD HH:MM:SS
- 兩個(gè)數(shù)據(jù)類型都包含「日期」和「時(shí)間」部分。
- 兩個(gè)數(shù)據(jù)類型都可以存儲(chǔ)微秒的小數(shù)秒(秒后6位小數(shù)秒)
二. DATETIME 和 TIMESTAMP 的區(qū)別
1.表示范圍
-
DATETIME
:1000-01-01 00:00:00.000000
到9999-12-31 23:59:59.999999
-
TIMESTAMP
:1970-01-01 00:00:01.000000
UTC 到2038-01-09 03:14:07.999999
UTC
2.空間占用
-
TIMESTAMP
:占 4 個(gè)字節(jié)(小數(shù)秒+3 個(gè)字節(jié)) -
DATETIME
:在 MySQL 5.6.4 之前,占 8 個(gè)字節(jié) ,之后版本,占 5 個(gè)字節(jié)。(小數(shù)秒+3 個(gè)字節(jié))
3.存入時(shí)間是否會(huì)自動(dòng)轉(zhuǎn)換?
-
TIMESTAMP
:TIMESTAMP 的值是從「當(dāng)前時(shí)間」轉(zhuǎn)換成 UTC 時(shí)間,或者反過來轉(zhuǎn)換。 -
DATETIME
:不會(huì)做任何轉(zhuǎn)換,也不會(huì)檢測時(shí)區(qū),你給什么數(shù)據(jù),它存什么數(shù)據(jù)。
4.使用 now() 存儲(chǔ)當(dāng)前時(shí)間時(shí),保存的實(shí)際值,是否與當(dāng)前計(jì)算機(jī)時(shí)間一致?
-
TIMESTAMP
:可能不一致。存儲(chǔ)值會(huì)被轉(zhuǎn)換成 UTC 時(shí)間值再存入數(shù)據(jù)庫。 -
DATETIME
:與當(dāng)前時(shí)間是一致的。
5.如果存入的是 NULL 時(shí),兩個(gè)類型如何存儲(chǔ)?
-
TIMESTAMP
:會(huì)自動(dòng)存儲(chǔ)當(dāng)前時(shí)間( now() )。 -
DATETIME
:不會(huì)自動(dòng)存儲(chǔ)當(dāng)前時(shí)間,會(huì)直接存入 NULL 值。
三. 使用場景辨析
在什么場景中,使用 DATETIME
或 TIMESTAMP
更合適?
TIMESTAMP 使用場景:計(jì)算飛機(jī)飛行時(shí)間
一架飛機(jī),從中國北京起飛,降落在美國紐約,計(jì)算它從北京飛往紐約的飛行時(shí)間。飛機(jī)在北京時(shí)間 2021-10-10 11:05:00 從北京起飛,在紐約時(shí)間 2021-10-10 09:50:00 降落(JL8006)。
這個(gè)場景中,如果使用 TIMESTAMP
來存時(shí)間,起飛和降落時(shí)間的值,都會(huì)被轉(zhuǎn)換成 UTC 時(shí)間,所以它們直接相減即可獲得結(jié)果。但如果使用 DATATIME
格式存時(shí)間,還需要進(jìn)行轉(zhuǎn)換,才可以完成,容易出錯(cuò)。
DATATIME 使用場景:記錄信息修改時(shí)間
如果只是記錄文件修改時(shí)間,最后更新時(shí)間這種不涉及加減轉(zhuǎn)換的情況,用 DATATIME
來存更直接,更方便,可讀性高,不繞彎子,不容易出錯(cuò)。文章來源:http://www.zghlxwxcb.cn/news/detail-403169.html
四. 總結(jié)
關(guān)于 datetime
和 timestamp
的選擇使用.文章來源地址http://www.zghlxwxcb.cn/news/detail-403169.html
- 在滿足使用條件的情況下,占據(jù)存儲(chǔ)空間越少越好,此時(shí)選擇
timestamp
比datetime
會(huì)更好。 -
timestamp
類型的存儲(chǔ),是以 UTC 時(shí)區(qū)來保存的,在顯示時(shí)會(huì)自動(dòng)將日期數(shù)據(jù)轉(zhuǎn)換,如果時(shí)間的場景對(duì)應(yīng)多個(gè)時(shí)區(qū),此時(shí)選擇timestamp
比datetime
更好。 - 關(guān)于日期的使用范圍,
timestamp
類型最大只支持到2038-01-19年,所以如果使用的日期時(shí)間較大, 則選擇datetime
比timestamp
更好。
到了這里,關(guān)于MySQL 中 DATETIME 和 TIMESTAMP 時(shí)間類型的區(qū)別及使用場景的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!