合理選擇資料類型是資料庫設計的基石,直接影響儲存空間、查詢效能、索引大小與資料正確性。本文系統梳理 MySQL 核心資料類型,結合實戰場景給出選型決策樹與避坑指南。
| 類型 | 儲存 | 有號範圍 | 無號範圍 | 典型適用場景 |
|---|---|---|---|---|
| TINYINT | 1 Byte | -128 ~ 127 | 0 ~ 255 | 布爾旗標、狀態碼、年齡、小型枚舉 |
| SMALLINT | 2 Bytes | -32,768 ~ 32,767 | 0 ~ 65,535 | 郵遞區號、小型計數器、遊戲屬性值 |
| MEDIUMINT | 3 Bytes | -8.3M ~ 8.3M | 0 ~ 16.7M | 中等規模表自增 ID(<1600 萬行) |
| INT / INTEGER | 4 Bytes | -21.4億 ~ 21.4億 | 0 ~ 42.9億 | 通用自增 ID、外鍵、大多數計數場景 |
| BIGINT | 8 Bytes | -9.22×10¹⁸ ~ 9.22×10¹⁸ | 0 ~ 1.84×10¹⁹ | 超大規模分散式 ID、時間戳毫秒、檔案大小 |
選型鐵律:「夠用就好,越小越好」。每行省 1 Byte,億級資料即省 100MB+ 儲存與索引空間,緩衝區命中率同步提升。盡量加 `UNSIGNED` 並明確 `NOT NULL`,除非業務真有負值需求。
DECIMAL(M, D) / NUMERIC:以字串形式儲存,每位數字佔 1 Byte,小數點固定,**運算不失真**。
| 類型 | 儲存 | 精度 | 適用場景 |
|---|---|---|---|
| FLOAT | 4 Bytes | ~7 位有效數字 | 感測器讀數、座標、非精確科學計算 |
| DOUBLE | 8 Bytes | ~15 位有效數字 | 高精度科學計算、GIS 座標 |
| 類型 | 儲存 | 範圍 | 特性 | 選型建議 |
|---|---|---|---|---|
| DATE | 3 Bytes | 1000-01-01 ~ 9999-12-31 | 純日期 | 生日、入職日期、訂單日期 |
| TIME | 3 Bytes | -838:59:59 ~ 838:59:59 | 純時間/間隔 | 營業時間、耗時統計 |
| DATETIME | 8 Bytes | 1000 ~ 9999 年 | **無時區感知**,原樣儲存 | 業務日誌、建立/更新時間(應用層統一 UTC 寫入) |
| TIMESTAMP | 4 Bytes | 1970-01-01 ~ 2038-01-19 | **具時區感知**,寫入轉 UTC,讀出轉會話時區 | 跨時區系統的事件時間、自動更新欄位 |
| YEAR | 1 Byte | 1901 ~ 2155 | 僅年份 | 年份篩選、統計維度 |
避坑指南:
| 特性 | CHAR(N) | VARCHAR(N) |
|---|---|---|
| 儲存方式 | 固定長度,右側補空格 | 變長,實際長度 + 1~2 Bytes 長度前綴 |
| 空間計算 | 固定 N Bytes(字符集字節數 × N) | 實際字元數 × 字節數 + 1/2 Bytes |
| 適用場景 | 長度極固定、極短(MD5、UUID、手機號、ISO 代碼) | 長度不固定、或大多數接近上限但非固定 |
| 索引效能 | 固定長度利於頁分裂預測 | 變長可能導致頁分裂,但空間節省通常更划算 |
| 類型 | 最大長度 | 長度前綴 | 適用場景 |
|---|---|---|---|
| TINYTEXT | 255 Bytes | 1 Byte | 極短備註、標籤 |
| TEXT | 64 KB | 2 Bytes | 文章內容、JSON 文檔、日誌詳情 |
| MEDIUMTEXT | 16 MB | 3 Bytes | 長文、完整 HTML 頁面 |
| LONGTEXT | 4 GB | 4 Bytes | 極大文檔、Base64 檔案內容 |
**BLOB** 對應二進位資料(圖片、檔案流),儲存機制同 TEXT 但無字符集/排序規則。生產環境強烈建議:大物件存對象存儲(S3/OSS),資料庫只存 URL/路徑,避免備份還原、複制延遲、緩衝區污染。
現代架構多改用 **TINYINT/SMALLINT + 應用層常數/字典表**,兼具效能與彈性。
原生 JSON 支援索引(虛擬欄位索引)、路徑查詢、部分更新。適合**結構半固定、頻繁變動、查詢模式多樣**的屬性(商品 SKU 屬性、用戶偏好設定、日誌上下文)。**不宜**替代核心關聯欄位。
資料類型選得對,效能優一半。將上述策略內化為團隊建表規範,配合 Code Review 機制,能從源頭避免 80% 的儲存與效能隱患。