首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 時間類型選擇指南:TIMESTAMP vs DATETIME vs DATE vs INT 存儲對比

     編輯:MySQL 資料庫相關知識

類型對比

類型存儲字節範圍精度時區感知適用場景
DATE31000-01-01 ~ 9999-12-31天否僅需日期(生日、入職日期)
TIMESTAMP41970-01-01 ~ 2038-01-19秒**是**(存儲 UTC,讀取按會話時區轉換)創建/修改時間戳、跨時區應用
DATETIME8(5.6.4+ 5+微秒位)1000-01-01 ~ 9999-12-31秒/微秒否業務時間、歷史/未來日期、需固定顯示
INT UNSIGNED4同 TIMESTAMP秒應用層處理**不推薦**:不可讀、無函數支援、維護成本高

選擇原則

  1. **僅需天精度** → DATE(最省空間,3 字節)。
  2. **需秒精度 + 跨時區/自動時區轉換** → TIMESTAMP(4 字節,自帶 UTC 轉換)。
  3. **需秒/微秒精度 + 固定顯示/超出 2038 年** → DATETIME(8 字節,無時區轉換)。
  4. **嚴禁用 INT 存 Unix 時間戳** — 雖省空間但失去 SQL 日期函數、可讀性、時區處理,維護極痛。

最佳實踐組合

CREATE TABLE t_order (
    id BIGINT PRIMARY KEY,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,          -- 下單瞬間,自動 UTC
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 修改自動刷新
    delivery_date DATE,                                      -- 預計送達日,無時區
    expire_at DATETIME                                       -- 過期時間,固定顯示,可存 2050 年
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved