無論是免費空間還是大型電商,合理的資料型別設計能節省儲存成本、避免精度陷阱、提升查詢效能。本文按類別深度解析 MySQL 常用型別選型原則。
| 型別 | 儲存 | 無號最大值 | 典型適用場景 |
|---|---|---|---|
| TINYINT | 1 Byte | 255 | 年齡、狀態碼、布林旗標 |
| SMALLINT | 2 Bytes | 65,535 | 遊戲技能值、小型編號 |
| MEDIUMINT | 3 Bytes | 16,777,215 | 千萬級自增 ID(省 1 Byte vs INT) |
| INT | 4 Bytes | 4,294,967,295 | 通用自增 ID、外鍵 |
| BIGINT | 8 Bytes | 1.84e19 | 分布式 ID、極大計數器 |
原則:夠用就好,越小越好。千萬行表每行省 1 Byte = 省 10 MB 磁碟 + 記憶體緩存。
| 型別 | 範圍 | 佔用 | 適用場景 |
|---|---|---|---|
| DATE | 1000-01-01 ~ 9999-12-31 | 3 Bytes | 生日、入職日、只需日期 |
| TIME | -838:59:59 ~ 838:59:59 | 3 Bytes | 上下班打卡、耗時統計 |
| DATETIME | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 8 Bytes | 訂單建立時間、日誌時間戳(不受時區影響) |
| TIMESTAMP | 1970-01-01 ~ 2038-01-19 | 4 Bytes | 自動更新的修改時間、跨時區應用 |
| YEAR | 1901 ~ 2155 | 1 Byte | 年份欄位 |
只存日期用 DATE,別用 DATETIME 浪費 5 Bytes。
| 型別 | 特性 | 實際佔用 | 選擇建議 |
|---|---|---|---|
| CHAR(n) | 固定長度,右側空格補齊 | n Bytes | 長度固定或差異極小(如 MD5、股票代碼、國旗代碼) |
| VARCHAR(n) | 變長,+1/+2 Byte 記錄長度 | 實際長度 + 1/2 | 長度不固定(姓名、地址、標題) |
| TINYTEXT | 最大 255 字元 | L + 1 | 短文本、標籤 |
| TEXT | 最大 65,535 | L + 2 | 文章內容、描述 |
| MEDIUMTEXT | 最大 16,777,215 | L + 3 | 長文本 |
| LONGTEXT | 最大 4,294,967,295 | L + 4 | 巨大文本、完整日誌 |
CHAR(8) 最划算。VARCHAR(6),滬市佔 7 Bytes、深市佔 5 Bytes。因滬市數量較多,CHAR(6) 反而更省空間。ENUM('male','female'):只能二選一,1~2 Bytes。比 TINYINT 更直觀,查詢可直接 WHERE sex='male'。SET('read','write','exec'):可多選,1~8 Bytes。適合權限標籤、多屬性標記。