首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 日期時間類型詳解:YEAR/DATE/TIME/DATETIME/TIMESTAMP 範圍、存儲、零值、插入格式

     編輯:MySQL 綜合教學

MySQL 日期時間類型詳解:YEAR/DATE/TIME/DATETIME/TIMESTAMP 範圍、存儲、零值、插入格式

系統對比 MySQL 五大日期時間類型,助你精準選型避坑。

類型對比總表

類型存儲範圍零值插入格式示例顯示格式
YEAR1B1901~215500002023 / '2023'2023
DATE3B1000-01-01 ~ 9999-12-310000-00-00'2023-05-01' / '20230501' / '2023@05@01'2023-05-01
TIME3B-838:59:59 ~ 838:59:5900:00:00'D HH:MM:SS' / 'HHMMSS' / 'HH:MM:SS'HH:MM:SS
DATETIME8B1000-01-01 00:00:00 ~ 9999-12-31 23:59:590000-00-00 00:00:00'2023-05-01 12:30:45' / '20230501123045'2023-05-01 12:30:45
TIMESTAMP4B1970-01-01 08:00:01 ~ 2038-01-19 11:14:07 (UTC)0000-00-00 00:00:00同 DATETIME / NULL / CURRENT_TIMESTAMP2023-05-01 12:30:45 (按時區顯示)

關鍵差異與避坑指南

  1. TIME 可存時長:'2 23:59:59' 表示 2 天 23 時 59 分 59 秒 = 71:59:59,超過 24 小時無問題。
  2. DATE/DATETIME 分隔符任意:'2023@05@01'、'2023*05*01' 均合法,顯示統一為 - 和 :。
  3. TIMESTAMP 帶時區:存儲 UTC,讀取按會話時區顯示。東八區寫入 2023-05-01 12:00:00,東七區讀取顯示 11:00:00。2038 年問題需評估長期項目風險。
  4. 插入 NULL/無值:TIMESTAMP 列插入 NULL 或無值自動設為當前時間(若未顯式指定 DEFAULT CURRENT_TIMESTAMP 行為一致)。
  5. 超出範圍插入零值:所有類型超出範圍均存儲零值,不報錯(嚴格模式下會報錯)。
  6. 零值陷阱:'0000-00-00' 在應用層常導致解析異常,建議啟用 NO_ZERO_DATE / NO_ZERO_IN_DATE SQL 模式禁止寫入零值。

選型建議

  • 僅需年份:YEAR(1 字節極省)。
  • 業務日期(無時區):DATE(3 字節)。
  • 業務日期時間(無時區、長期存儲):DATETIME(8 字節,範圍大、無 2038 問題)。
  • 系統維護時間(創建/更新時間、需時區感知):TIMESTAMP(4 字節,自動維護)。
  • 時長/持續時間:TIME(可超 24h)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved