Navicat 部落格

在 MySQL 中處理日期和時間 - 第 2 部分 2022 年 3 月 4 日,由 Robert Gravelle 撰寫

TIMESTAMP 和 YEAR 類型

歡迎回到這個關於在 MySQL 中處理日期和時間的系列。在頭兩部分中,我們探討 MySQL 的時序資料類型。第 1 部分介紹了 DATE、TIME 和 DATETIME 資料類型,而本部分將介紹餘下的 TIMESTAMP 和 YEAR 類型。

TIMESTAMP 類型

TIMESTAMP 類型類似於 MySQL 中的 DATETIME,因為兩者都是包含日期和時間組合的時序資料類型。這就引出了一個問題:為什麼相同的資訊有兩種類型?首先,MySQL 中的時間戳記通常用於追蹤記錄的變更,並且通常在記錄每次變更時更新,而日期時間用於儲存特定的時序值。另一方面,DATETIME 代表一個日期(如行事曆中所示)和一個時間(如掛鐘上所示),而 TIMESTAMP 代表明確定義的時間點。如果你的應用程式處理時區,這種區別可能非常重要,因為「2009-11-01 14:35:00」發生在多久之前取決於你所在的時區。同時,自「1970-01-01 00:00:00 UTC」以來的 1248761460 秒總是指同一時間點。

在儲存方面,TIMESTAMP 需要 4 個位元組,而 DATETIME 需要 5 個位元組。TIMESTAMP 欄儲存 14 個字元,但你可以以不同的方式顯示它,具體取決於你如何定義它。例如,如果你將欄定義為 TIMESTAMP(2),則只會顯示兩位數的年份(即使儲存了完整值)。這種方法的優點是,如果你稍後決定要顯示完整值,你可以變更資料表定義,完整值將會顯示。

下面是定義 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 16 資料表設計器中,時間戳記的精確度可以在「長度」欄中定義:

timestamp_in_table_designer (44K)

如果未提供「長度」(如上例所示),Navicat 會顯示完整欄位,就好像它被宣告為 TIMESTAMP(14):

timestamp_display_format (44K)

YEAR 類型

許多 DBA 選擇將年份儲存為整數(Interger)。這樣做當然是沒有問題,但使用 MySQL 的專用 YEAR 類型更為有效,因為 YEAR 類型僅使用 1 個位元組儲存。它可以宣告為 YEAR(2) 或 YEAR(4) 以指定兩個或四個字元的顯示寬度。如果未指定寬度,則預設為四個字元。YEAR(4) 和 YEAR(2) 具有不同的顯示格式,但具有相同的值範圍:

  • 對於 4 位數格式,MySQL 以 YYYY 格式顯示 YEAR 值,範圍由 1901 至 2155,或 0000。
  • 對於 2 位數格式,MySQL 僅顯示最後兩位(最低有效位)數字;例如,70(代表 1970 或 2070)或 69(代表 2069)。

以下是 Navicat 資料表設計器中四位數格式的年份欄範例:

year_in_table_designer (77K)

因此,我們在資料表中看到完整年份:

year_display_format (89K)

總結

我們對五種 MySQL 時序資料類型的探索到此結束。下一部分將介紹一些有用的日期和時間函式。

Navicat 文章
頻道記錄
分享
部落格封存檔