| 類型 | 位元組 | 有號範圍 | 無號範圍 |
|---|---|---|---|
| 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 / INTEGER | 4 | -2,147,483,648 ~ 2,147,483,647 | 0 ~ 4,294,967,295 |
| BIGINT | 8 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | 0 ~ 18,446,744,073,709,551,615 |
INT(11))是「顯示寬度」,不是長度限制ZEROFILL 時的前導零顯示(如 INT(5) ZEROFILL 插入 12 → 顯示 00012)。UNSIGNED 禁止負數,範圍從 0 開始CREATE TABLE t (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY);
AUTO_INCREMENT 最大值受類型上限限制INT UNSIGNED 最大 42 億,足支撐大多數業務。BIGINT UNSIGNED。| 誤區 | 事實 |
|---|---|
INT(3) 只能存 3 位數 | 可存 21 億,顯示寬度 3 僅影響 ZEROFILL 填零 |
| 顯示寬度越大越佔空間 | 空間由類型決定,INT 永遠 4 Bytes |
INT(11) 是標準寫法 | 11 是舊版預設顯示寬度,無特殊意義 |
CREATE TABLE bits (val ENUM('T','F') NOT NULL);
INSERT INTO bits (val) VALUES ('W'), ('T'), ('F');
-- Warning: Data truncated for column 'val' at row 1
SELECT COUNT(DISTINCT val) FROM bits; -- 返回 3(含空字串錯誤值)
說明:ENUM 插入非定義值會存入空字串(數值 0),而非報錯中止,需注意。