字符類型選擇看似微小,實則關係存儲空間、查詢速度與數據完整性。本文從底層存儲原理出發,結合不同存儲引擎特性,為你提供科學的選型依據。
| 特性 | CHAR(M) | VARCHAR(M) |
|---|---|---|
| 長度 | 固定 M 字節 | 實際長度 L + 1~2 字節(長度前綴) |
| 空間填充 | 右側補空格 | 不補空格 |
| 截尾行為 | 檢索時自動去除尾部空格 | 保留尾部空格 |
| 最大長度 | 255 字符 (MySQL 8.0 前) | 65,535 字節 (受行大小限制) |
內部統一按固定長度存儲,CHAR/VARCHAR 效能一致。
CHAR,省去長度前綴開銷。VARCHAR 或 TEXT。VARCHAR(255) 非「免費」,內存臨時表按定義長度分配,影響排序、連接緩衝區效率。CHAR >= 4)隱式轉為 VARCHAR。CHAR(1~3) 不會被轉換。沒有絕對優劣,只有場景契合度。掌握底層存儲差異、引擎特性與隱式規則,才能在建表時做出最優決策。原則:短且固定用 CHAR,長且變動用 VARCHAR,InnoDB 偏愛 VARCHAR,MyISAM 固定長更穩。