博客 / 詳情

返回

MySQL DATETIME類型存儲空間詳解:從8字節到5字節的演變

MySQL系列文章

在MySQL數據庫設計中,DATETIME類型用於存儲日期和時間信息,但其存儲空間大小並非固定不變,而是隨MySQL版本迭代和精度定義動態變化。本文將詳細説明其存儲規則,並提供清晰的對比表格。

一、核心結論

  • MySQL 5.6.4 是分水嶺:此前固定佔用 8 字節;此後優化為 5 字節基礎 + 精度附加空間
  • 精度決定擴展空間:若定義小數秒(如 DATETIME(3)),需額外 1~3 字節
  • 無精度定義時默認佔 5 字節:現代MySQL(≥5.6.4)的常見場景。

二、存儲空間對比表格

MySQL 版本 是否支持小數秒 數據類型定義 存儲空間 範圍 存儲格式
< 5.6.4 ❌ 不支持 DATETIME 8 字節 '1000-01-01 00:00:00''9999-12-31 23:59:59' YYYYMMDDHHMMSS(整數)
≥ 5.6.4 ✅ 支持 DATETIMEDATETIME(0) 5 字節 同上 優化的二進制打包格式
≥ 5.6.4 ✅ 支持 DATETIME(1) / (2) 6 字節 同上(含小數秒) 基礎5B + 1B精度擴展
≥ 5.6.4 ✅ 支持 DATETIME(3) / (4) 7 字節 同上(含小數秒) 基礎5B + 2B精度擴展
≥ 5.6.4 ✅ 支持 DATETIME(5) / (6) 8 字節 同上(含小數秒) 基礎5B + 3B精度擴展

:精度擴展空間計算公式:5 + CEIL(fsp / 2) 字節(fsp為小數秒位數,範圍0-6)。


三、關鍵注意事項

  1. 版本查詢命令
    確認MySQL版本是首要步驟:

    SELECT VERSION(); -- 輸出示例:8.0.33
    
  2. 精度定義檢查
    通過表結構查看是否定義小數秒:

    SHOW CREATE TABLE your_table;
    

    若顯示created_at DATETIME(3),則表示精度為毫秒(佔7字節)。

  3. 空間優化建議

    • 無小數秒需求時,直接使用 DATETIME(默認5字節);
    • 需存儲毫秒/微秒時,按業務需求選擇最小精度(如DATETIME(3));
    • 舊版本升級後,建議檢查表結構以利用空間優化。

四、總結

場景描述 存儲空間
MySQL 5.6.3及之前版本 8 字節
MySQL 5.6.4+,無小數秒(默認) 5 字節
MySQL 5.6.4+,含1-2位小數秒 6 字節
MySQL 5.6.4+,含3-4位小數秒 7 字節
MySQL 5.6.4+,含5-6位小數秒 8 字節

現代MySQL(≥5.6.4)中,DATETIME在未定義小數秒時僅需5字節,比舊版本節約37.5%存儲空間。合理利用精度定義,可顯著優化大規模數據存儲效率。

user avatar hebeiniunai 頭像 ryan_5fd1bc9a06259 頭像 bssj 頭像
3 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.