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

MySQL 時間類型深度對比:TIMESTAMP vs DATETIME vs INT 選型指南

     編輯:MySQL 綜合教學

MySQL 時間類型深度對比:TIMESTAMP vs DATETIME vs INT 選型指南

1. 三類型核心屬性對比

屬性INT (Unix Timestamp)DATETIMETIMESTAMP
存儲字節4 bytes8 bytes (5.6.4+ 支持微秒)4 bytes
數值範圍1970-01-01 ~ 2038-01-19 (32位有符號)1000-01-01 ~ 9999-12-311970-01-01 ~ 2038-01-19
時區處理無(應用層自行轉換)無(存什麼取什麼,不轉換)自動轉換:存儲轉 UTC,讀取轉回會話時區
默認值無5.6.5+ 支持 CURRENT_TIMESTAMPCURRENT_TIMESTAMP
自動更新無5.6.5+ 支持 ON UPDATE自動更新為當前時間
可為 NULL是是是(但無實際意義)
時間函數支持❌ 不支持✅ 完整支持✅ 完整支持
索引/范圍查詢✅ BETWEEN 極快✅ 支持✅ 支持

2. 選型決策樹

需要 2038 年後日期? → DATETIME
需要時區自動轉換? → TIMESTAMP
海量范圍查詢、極致性能? → INT (應用層處理轉換)
記錄創建時間(不可變)? → DATETIME DEFAULT CURRENT_TIMESTAMP
記錄最後修改時間(自動更新)? → TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

3. 典型應用場景

場景推薦類型DDL 示例
訂單創建時間(永不變)DATETIMEcreated_at DATETIME DEFAULT CURRENT_TIMESTAMP
用戶資料最後修改時間TIMESTAMPupdated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
日誌表、埋點數據(億級、頻繁范圍查詢)INTlog_time INT UNSIGNED NOT NULL
歷史數據、生日、年份等長跨度DATETIMEbirth_date DATETIME

4. 避坑提醒

  • TIMESTAMP 2038 年問題:32 位系統 2038-01-19 03:14:07 後溢出,長期項目慎用或規劃遷移 64 位/DATETIME。
  • DATETIME 不做時區轉換:跨時區應用需應用層統一處理(推薦存 UTC)。
  • INT 類型不可直接用時間函數:DATE_FORMAT() 等失效,需 FROM_UNIXTIME() 轉換。
  • 5.6.4 前 DATETIME 不支持微秒,5.6.4+ 可用 DATETIME(3) 存毫秒。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved