整數類型 (精確數值)
| 類型 | 儲存 | 有號範圍 | 無號範圍 (UNSIGNED) |
| TINYINT | 1 byte | -128 ~ 127 | 0 ~ 255 |
| SMALLINT | 2 bytes | -32,768 ~ 32,767 | 0 ~ 65,535 |
| MEDIUMINT | 3 bytes | -8,388,608 ~ 8,388,607 | 0 ~ 16,777,215 |
| INT / INTEGER | 4 bytes | -2,147,483,648 ~ 2,147,483,647 | 0 ~ 4,294,967,295 |
| BIGINT | 8 bytes | -9.22e18 ~ 9.22e18 | 0 ~ 1.84e19 |
選型原則:夠用就好,節省空間 → 更多行進入記憶體 → 更快查詢。
浮點/定點數值
| 類型 | 儲存 | 範圍/精度 | 用途 |
| FLOAT | 4 bytes | ±3.4e38, ~7 位有效數字 | 科學計算、近似值 |
| DOUBLE / REAL | 8 bytes | ±1.7e308, ~15 位有效數字 | 高精度近似值 |
| DECIMAL(M,D) / NUMERIC(M,D) | M+2 bytes (約) | 精確儲存,**金額/財務必用** | M=總位數(含小數點), D=小數位, M≤65, D≤30 |
日期時間類型
| 類型 | 儲存 | 範圍 | 特性 |
| DATE | 3 bytes | 1000-01-01 ~ 9999-12-31 | 純日期 |
| DATETIME | 8 bytes (5.6.4 前) | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 無時區感知 |
| TIMESTAMP | 4 bytes | 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC | 時區感知,寫入/讀取自動轉換 |
| TIME | 3 bytes | -838:59:59 ~ 838:59:59 | 時間間隔/一天內時間 |
| YEAR[(2|4)] | 1 byte | 4 位: 1901~2155, 0000; 2 位: 70~69 (1970~2069) | 5.6.6 後不建議 2 位 |
選型建議:DATETIME 存業務時間 (不隨時區變)、TIMESTAMP 存建立/更新時間 (自動 UTC 轉換)、YEAR 存年份。
字串類型
| 類型 | 最大長度 | 儲存特性 | 適用場景 |
| CHAR(M) | 255 字元 | 定長,右側空格填充,讀取時去尾部空格 | 固定長度代碼 (ISO 國家碼、MD5 雜湊) |
| VARCHAR(M) | 255 (5.0.3 前) / 65,535 字元 (共享 64KB 行上限) | 變長,1-2 bytes 長度前綴,不填充 | 通用變長字串 |
| TINYTEXT / TINYBLOB | 255 (2^8-1) 字元/位元組 | 無預設值、不區分大小寫 (TEXT)、二進制 (BLOB) | 短文本/二進制片段 |
| TEXT / BLOB | 65,535 (2^16-1) | 同上 | 文章內容、JSON 文檔 |
| MEDIUMTEXT / MEDIUMBLOB | 16,777,215 (2^24-1) | 同上 | 長文本、圖片二進制 |
| LONGTEXT / LONGBLOB | 4,294,967,295 (2^32-1) | 同上 | 超大物件 (建議外部存儲 + DB 存路徑) |
枚舉與集合
| 類型 | 成員上限 | 儲存 | 特性 |
| ENUM('v1','v2',...) | 65,535 | 1-2 bytes (索引值) | 單選、強制合法值、內部整數比較極快 |
| SET('v1','v2',...) | 64 | 1-8 bytes (位元遮罩) | 多選、位運算過濾 (FIND_IN_SET) |
注意:ENUM/SET 成員修改需 ALTER TABLE 重建表,**慎用於頻繁變更的業務字典**,建議改用關聯表 (字典表 + 外鍵)。
快速選型決策樹
- 整數 → 最小滿足範圍的 INT 系 + UNSIGNED
- 金額/精確小數 → DECIMAL(10,2) / (19,4)
- 日期時間 → DATETIME (業務) / TIMESTAMP (系統自動維護)
- 定長代碼 → CHAR(固定長)
- 通用字串 → VARCHAR(合理上限)
- 大文本/二進制 → TEXT/BLOB (評估外部存儲)
- 固定集合單選 → ENUM (少量穩定)
- 固定集合多選 → SET (≤64 項)