| 特性 | CHAR(M) | VARCHAR(M) |
|---|---|---|
| 最大長度 | 255 字符 | 65,535 字符(受行大小 65,535 字節限制) |
| 存儲方式 | 固定長度,不足補空格 | 變長,額外 1-2 字節記錄長度 |
| 實際佔用 | 恆為 M 字節 | 實際字符數 + 1/2 字節 |
| 索引/排序效率 | 高(定長) | 略低 |
選型建議:長度固定(如 MD5、手機號、身份證)用 CHAR;長度變動大用 VARCHAR。UTF8 下 VARCHAR(65535) 會報錯,最大約 21,845 字符(65535/3)。
CREATE TABLE country (place ENUM('Japan','China','Russia','Brazil','America'));
INSERT INTO country VALUES ('China'); -- 實際存儲索引 2(1 字節)
| 類型 | 字節 | 有符號範圍 | 無符號範圍 |
|---|---|---|---|
| TINYINT | 1 | -128 ~ 127 | 0 ~ 255 |
| SMALLINT | 2 | -32,768 ~ 32,767 | 0 ~ 65,535 |
| MEDIUMINT | 3 | -8,388,608 ~ 8,388,607 | 0 ~ 16,777,215 |
| INT | 4 | -2,147,483,648 ~ 2,147,483,647 | 0 ~ 4,294,967,295 |
| BIGINT | 8 | -9.22e18 ~ 9.22e18 | 0 ~ 1.84e19 |
語法:INT [UNSIGNED] [ZEROFILL]。UNSIGNED 將正數範圍擴大一倍;ZEROFILL 自動補 0。
M = 總位數,D = 小數位。超出 D 四捨五入,整數位超出 M-D 報錯。嚴禁用 ==/!= 直接比較浮點數。