合理選型直接影響儲存空間、索引效能與查詢精度。本文從數值、字串、日期、二進制四大類別,解析各類型儲存開銷、適用場景與避坑原則,助力建庫決策。
| 類型 | 儲存 | 有號範圍 | 無號範圍 | 適用場景 |
|---|---|---|---|---|
| TINYINT | 1B | -128~127 | 0~255 | 布林、狀態碼、極小計數 |
| SMALLINT | 2B | -32K~32K | 0~65K | 年齡、郵遞區號、中型計數 |
| MEDIUMINT | 3B | -8M~8M | 0~16M | 百萬級自增 ID、中型統計 |
| INT | 4B | -21E~21E | 0~42E | 通用自增 ID、大多數計數 |
| BIGINT | 8B | -9E18~9E18 | 0~18E18 | 極大計數、分散式 ID、時間戳毫秒 |
原則:夠用最小。1600 萬行表用 MEDIUMINT 替代 INT 節省 10MB+ 空間並縮小索引。
DECIMAL(10,2) 佔 10B,INT 分單位 (存分) 僅 4B 且計算更快| 類型 | 儲存 | 最大長度 | 特性 | 適用 |
|---|---|---|---|---|
| CHAR(N) | N B (定長) | 255 | 右側空格填充、比較快 | 固定長度代碼 (ISO 國碼、MD5 前綴) |
| VARCHAR(N) | L+1/2B (變長) | 65,535 | 實際長度+1/2B 長度前綴 | 通用變長字串、名稱、描述 |
| TINYTEXT | L+1B | 255 | 不支援 DEFAULT、不預設索引 | 極短文本 |
| TEXT | L+2B | 64KB | 同上 | 文章、日誌 |
| MEDIUMTEXT | L+3B | 16MB | 同上 | 長文本 |
| LONGTEXT | L+4B | 4GB | 同上 | 巨大文本 |
避坑:TEXT 族群無法建立完整索引 (僅前綴),排序/分組會用臨時表,慎用於高頻查詢欄位。
| 類型 | 儲存 | 範圍 | 精度 | 時區感知 | 適用 |
|---|---|---|---|---|---|
| DATE | 3B | 1000-01-01 ~ 9999-12-31 | 天 | 無 | 生日、入職日 |
| TIME | 3B | -838:59:59 ~ 838:59:59 | 秒 | 無 | 工時、時長 |
| DATETIME | 8B | 同 DATE + TIME | 秒 | 無 | 建立時間、日誌 (不隨時區變) |
| TIMESTAMP | 4B | 1970-01-01 ~ 2038-01-19 | 秒 | 有 (儲存 UTC、讀取轉換) | 更新時間、跨時區應用 |
| YEAR | 1B | 1901~2155 | 年 | 無 | 年份欄位 |
選型:跨時區用 TIMESTAMP;固定展示用 DATETIME;5.6.4+ 支援微秒 DATETIME(6)/TIMESTAMP(6)。
| 類型 | 儲存 | 最大 | 適用 |
|---|---|---|---|
| BINARY(N) / VARBINARY(N) | 同 CHAR/VARCHAR | 同 | 二進制比較、加密雜湊、IP 位址 |
| BLOB 族群 (TINY/BLOB/MEDIUM/LONG) | 同 TEXT 族群 | 同 | 圖片、檔案、序列化物件 |
大二進制物件建議存檔案系統/物件存儲,資料庫僅存路徑/雜湊。
類型選型是架構階段最低成本、最高收益的優化決策。