在 MySQL 中處理日期和時(shí)間(二)
第二章節(jié):TIMESTAMP 和 YEAR 類型
歡迎回到這個(gè)關(guān)于在 MySQL 中處理日期和時(shí)間的系列。在前面章節(jié)中,我們探討 MySQL 的時(shí)態(tài)數(shù)據(jù)類型。第一部分介紹了 DATE、TIME 和 DATETIME 數(shù)據(jù)類型,而本部分將介紹余下的 TIMESTAMP 和 YEAR 類型。
TIMESTAMP?類型
TIMESTAMP 類型與 MySQL 中的 DATETIME 相似,兩者都是包含日期和時(shí)間組合的時(shí)態(tài)數(shù)據(jù)類型。這就引出了一個(gè)問(wèn)題,為什么同一信息有兩種類型?首先,MySQL 中的時(shí)間戳通常用于跟蹤記錄的更改,并且通常在每次記錄更改時(shí)更新,而日期時(shí)間用于存儲(chǔ)特定的時(shí)間值。另一方面,DATETIME 表示日期(在日歷中)和時(shí)間(在掛鐘上),而 TIMESTAMP 表示明確定義的時(shí)間點(diǎn)。如果你的應(yīng)用程序處理時(shí)區(qū),這種區(qū)別可能非常重要,因?yàn)椤?009-11-01 14:35:00”是多久之前取決于你所在的時(shí)區(qū)。同時(shí),自“1970-01-01 00:00:00 UTC”以來(lái)的 1248761460?秒總是指同一時(shí)間點(diǎn)。
在存儲(chǔ)方面,TIMESTAMP 需要 4 個(gè)字節(jié)。TIMESTAMP 列存儲(chǔ) 14 個(gè)字符,但你可以以不同的方式顯示它,具體取決于你如何定義它。例如,如果你將列定義為 TIMESTAMP(2),則只會(huì)顯示兩位數(shù)的年份(即使存儲(chǔ)了完整值)。這種方法的優(yōu)點(diǎn)是,如果你稍后決定要顯示完整值,你可以更改表定義,完整值將會(huì)顯示。
下面是定義 TIMESTAMP 的各種方法,以及生成的顯示格式:
TIMESTAMP(14): YYYY-MM-DD HH:MM:SS
TIMESTAMP(12): YY-MM-DD HH:MM:SS
TIMESTAMP(10): YY-MM-DD HH:MM
TIMESTAMP(8): YYYY-MM-DD
TIMESTAMP(6): YY-MM-DD
TIMESTAMP(4): YY-MM
TIMESTAMP(2): YY
在 Navicat 客戶端的表設(shè)計(jì)器中,時(shí)間戳的精度可以在“長(zhǎng)度”列中定義:

如果沒(méi)有提供“長(zhǎng)度”(如上例所示),Navicat 會(huì)顯示完整字段,就好像它被聲明為 TIMESTAMP(14):

YEAR?類型
許多 DBA 選擇將年份存儲(chǔ)為整數(shù)(Interger)。這樣做當(dāng)然是沒(méi)有問(wèn)題,但使用 MySQL 的專用 YEAR 類型更有效,因?yàn)?YEAR 類型僅使用 1 個(gè)字節(jié)存儲(chǔ)。它可以聲明為 YEAR(2)?或 YEAR(4)?以指定兩個(gè)或四個(gè)字符的顯示寬度。如果未指定寬度,則默認(rèn)為四個(gè)字符。YEAR(4)?和 YEAR(2)?具有不同的顯示格式,但具有相同的值范圍:
對(duì)于 4 位數(shù)格式,MySQL 以 YYYY 格式顯示 YEAR 值,范圍為 1901 到 2155,或?0000。
對(duì)于 2 位數(shù)格式,MySQL 僅顯示最后兩位(最低有效位)數(shù)字;例如,70(代表 1970?或 2070)或 69(代表 2069)。
以下是 Navicat 表設(shè)計(jì)器中四位數(shù)格式的年份列示例:

因此,我們?cè)诒碇锌吹酵暾攴荩?/span>

總結(jié)
我們對(duì)五種 MySQL 時(shí)態(tài)數(shù)據(jù)類型的探索到此結(jié)束。下一部分將介紹一些有用的日期和時(shí)間函數(shù)。
推薦閱讀
(點(diǎn)擊標(biāo)題可跳轉(zhuǎn)閱讀)
