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

MySQL 時間數據類型總結:DATE、DATETIME、TIMESTAMP 選型指南

     編輯:MySQL 綜合教學

MySQL 時間數據類型總結:DATE、DATETIME、TIMESTAMP 選型指南

MySQL 提供了多種時間相關數據類型,正確選型對存儲效率、查詢性能及業務正確性至關重要。本文總結核心類型特性與選型建議。

核心時間類型對比

類型存儲字節格式範圍時區轉換適用場景
DATE3 字節YYYY-MM-DD1000-01-01 ~ 9999-12-31無僅需日期(生日、入職日期)
TIME3 字節HH:MM:SS-838:59:59 ~ 838:59:59無僅需時間(鬧鐘、工時)
DATETIME8 字節YYYY-MM-DD HH:MM:SS1000-01-01 00:00:00 ~ 9999-12-31 23:59:59無(存儲字面值)歷史數據、跨時區系統、需保留原始輸入時間
TIMESTAMP4 字節YYYY-MM-DD HH:MM:SS1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC有(存儲 UTC,讀取轉當前會話時區)記錄創建/更新時間、日志、跨時區應用
YEAR1 字節YYYY1901 ~ 2155無僅需年份

關鍵差異深度解析

1. 存儲空間與範圍

  • TIMESTAMP 僅 4 字節,比 DATETIME 節省 50% 空間,但範圍限制在 1970-2038 年(2038 年問題)。
  • DATETIME 8 字節,範圍極大(1000-9999 年),適合歷史/未來日期。

2. 時區行為(最關鍵差異)

  • TIMESTAMP:寫入時將會話時區時間轉為 UTC 存儲;讀取時轉回會話時區。跨時區應用首選。
  • DATETIME:存儲字面值,不進行時區轉換。適合業務需保留用戶原始輸入時間的場景。

3. 自動初始化與更新特性

MySQL 5.6.5+ 支持多列自動屬性:

CREATE TABLE t (
  create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

DATETIME 同版本起亦支持類似語法。

選型決策樹

  1. 是否需跨時區顯示?→ 是 → TIMESTAMP(注意 2038 年限制)
  2. 是否需存儲 1970 前或 2038 後日期?→ 是 → DATETIME
  3. 僅需日期?→ DATE(3 字節,最節省)
  4. 僅需時間?→ TIME
  5. 記錄行創建/修改時間?→ TIMESTAMP + DEFAULT CURRENT_TIMESTAMP + ON UPDATE CURRENT_TIMESTAMP

最佳實踐建議

  • 統一使用 TIMESTAMP 記錄系統操作時間(創建、更新、日志),利用自動屬性減少應用層代碼。
  • 業務屬性時間(如出生日期、合同生效日)用 DATE 或 DATETIME,避免時區轉換導致業務誤解。
  • 避免在同一表混用 DATETIME 和 TIMESTAMP 記錄相似語義時間,防止時區處理混淆。
  • MySQL 8.0+ 可考慮使用 DATETIME(6) 獲得微秒精度。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved