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 | ✅ 支持 | DATETIME 或 DATETIME(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)。
三、關鍵注意事項
-
版本查詢命令
確認MySQL版本是首要步驟:SELECT VERSION(); -- 輸出示例:8.0.33 -
精度定義檢查
通過表結構查看是否定義小數秒:SHOW CREATE TABLE your_table;若顯示
created_at DATETIME(3),則表示精度為毫秒(佔7字節)。 -
空間優化建議
- 無小數秒需求時,直接使用
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%存儲空間。合理利用精度定義,可顯著優化大規模數據存儲效率。