文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  資料類型  /  日期和時間資料類型

13.2 日期和時間資料類型

用於表示時間值的日期和時間資料類型為 DATETIMEDATETIMETIMESTAMPYEAR。每個時間類型都有一個有效值的範圍,以及一個 值,當您指定 MySQL 無法表示的無效值時可以使用。 TIMESTAMPDATETIME 類型具有特殊的自動更新行為,詳情請參閱 第 13.2.5 節,「TIMESTAMP 和 DATETIME 的自動初始化和更新」

有關時間資料類型的儲存需求的資訊,請參閱第 13.7 節,「資料類型儲存需求」

有關對時間值進行操作的函數的說明,請參閱第 14.7 節,「日期和時間函數」

使用日期和時間類型時,請記住這些一般注意事項

  • MySQL 會以標準輸出格式擷取給定日期或時間類型的值,但它會嘗試解讀您提供的輸入值的各種格式(例如,當您指定要分配或與日期或時間類型進行比較的值時)。有關日期和時間類型允許的格式的說明,請參閱第 11.1.3 節,「日期和時間文字」。預期您會提供有效值。如果您使用其他格式的值,可能會發生不可預測的結果。

  • 雖然 MySQL 嘗試解讀多種格式的值,但日期部分必須始終以年-月-日的順序給出(例如,'98-09-04'),而不是其他地方常用的月-日-年或日-月-年順序(例如,'09-04-98''04-09-98')。若要將其他順序的字串轉換為年-月-日順序,STR_TO_DATE() 函數可能很有用。

  • 包含 2 位數年份值的日期會產生歧義,因為世紀未知。MySQL 使用以下規則解讀 2 位數年份值

    • 範圍 70-99 中的年份值會變成 1970-1999

    • 範圍 00-69 中的年份值會變成 2000-2069

    另請參閱第 13.2.9 節,「日期中的 2 位數年份」

  • 根據第 13.2.8 節,「日期和時間類型之間的轉換」中的規則,將值從一個時間類型轉換為另一個時間類型。

  • 如果日期或時間值在數值環境中使用,MySQL 會自動將其轉換為數字,反之亦然。

  • 預設情況下,當 MySQL 遇到超出範圍或對於類型無效的日期或時間類型的值時,它會將該值轉換為該類型的 值。例外情況是,超出範圍的 TIME 值會被截斷為 TIME 範圍的適當端點。

  • 透過將 SQL 模式設定為適當的值,您可以更精確地指定您希望 MySQL 支援哪種日期。(請參閱第 7.1.11 節,「伺服器 SQL 模式」。)透過啟用 ALLOW_INVALID_DATES SQL 模式,您可以讓 MySQL 接受某些日期,例如 '2009-11-31'。當您想要將使用者指定(例如,在網頁表單中)的 可能錯誤 值儲存在資料庫中以供將來處理時,這很有用。在此模式下,MySQL 只會驗證月份是否在 1 到 12 的範圍內,以及日期是否在 1 到 31 的範圍內。

  • MySQL 允許您在 DATEDATETIME 欄位中儲存日期,其中日或月和日為零。這對於需要儲存可能不知道確切日期的出生日期的應用程式很有用。在這種情況下,您只需將日期儲存為 '2009-00-00''2009-01-00'。但是,對於此類日期,您不應期望從需要完整日期的函數(例如 DATE_SUB()DATE_ADD())中獲得正確的結果。若要禁止日期中出現零月或零日部分,請啟用 NO_ZERO_IN_DATE 模式。

  • MySQL 允許您將 '0000-00-00' 儲存為 虛擬日期。在某些情況下,這比使用 NULL 值更方便,並使用更少的資料和索引空間。若要禁止 '0000-00-00',請啟用 NO_ZERO_DATE 模式。

  • 透過 Connector/ODBC 使用的日期或時間值會自動轉換為 NULL,因為 ODBC 無法處理此類值。

下表顯示每種類型的值的格式。值是特殊的,但是您可以使用表中顯示的值來顯式儲存或參考它們。您也可以使用更容易撰寫的值 '0'0 來執行此操作。對於包含日期部分的 temporal 類型(DATEDATETIMETIMESTAMP),使用這些值可能會產生警告或錯誤。確切的行為取決於是否啟用嚴格模式和 NO_ZERO_DATE SQL 模式;請參閱 第 7.1.11 節,「伺服器 SQL 模式」

資料類型
DATE '0000-00-00'
TIME '00:00:00'
DATETIME '0000-00-00 00:00:00'
TIMESTAMP '0000-00-00 00:00:00'
YEAR 0000