澄清 int(11) 中數字 11 的真實含義:僅為顯示寬度,不影響儲存範圍。
| 型別 | 位元組 | 有號範圍 | 無號範圍 |
|---|---|---|---|
| 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 永遠佔 4 位元組,int(5)、int(11)、int(20) 儲存能力完全相同。
僅在 UNSIGNED ZEROFILL** 組合下生效:不足寬度左側補 0。
CREATE TABLE foo (bar INT(5) UNSIGNED ZEROFILL);
INSERT INTO foo VALUES (42), (101), (9876543);
SELECT * FROM foo;
+---------+
| bar |
+---------+
| 00042 |
| 00101 |
| 9876543 | -- 超過寬度正常顯示,不截斷
+---------+
int(3) 只能存 3 位數 → 實際可存 10 位數int(11) 比 int(4) 佔更多空間 → 同為 4 bytesZEROFILL 顯示格式,不影響儲存、索引、計算BOOL / BOOLEAN 是 TINYINT(1) 同義字,但 TINYINT(1) 仍可存 100 等超出 0/1 的值,應用層需自行約束。