正如其他人所說,列可以存儲的最小/最大值以及以字節為單位的存儲量僅由類型而不是長度定義 .
很多這些答案都說 (11) 部分僅影響顯示寬度,這不完全正確,但主要是 .
int(2) 與 no zerofill specified 的定義將:
仍然接受 100 的值
輸出時
仍為 100 100 的值(不是 0 或 00 )
display width 將是從select查詢輸出的最大值的寬度 .
(2) 唯一能做的就是 if zerofill is also specified :
1 的值將顯示 01 .
顯示值時,該列將始終具有 width of the maximum possible value the column could take (整數的10位數),而不是顯示該列需要在該特定選擇查詢中顯示的最大值所需的最小寬度,這可能要小得多 .
該列仍然可以使用,并顯示超過長度的值,但這些值不會以0為前綴 .
查看所有細微差別的最佳方法是運行:
CREATE TABLE `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`int1` int(10) NOT NULL,
`int2` int(3) NOT NULL,
`zerofill1` int(10) ZEROFILL NOT NULL,
`zerofill2` int(3) ZEROFILL NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `mytable`
(`int1`, `int2`, `zerofill1`, `zerofill2`)
VALUES
(10000, 10000, 10000, 10000),
(100, 100, 100, 100);
select * from mytable;
這將輸出:
+----+-------+-------+------------+-----------+
| id | int1 | int2 | zerofill1 | zerofill2 |
+----+-------+-------+------------+-----------+
| 1 | 10000 | 10000 | 0000010000 | 10000 |
| 2 | 100 | 100 | 0000000100 | 100 |
+----+-------+-------+------------+-----------+
請注意 int1 列的顯示寬度比 zerofill2 小得多,即使長度較大 .
這個答案是針對Linux的MySQL 5.7.12進行測試的,對于其他實現可能會有所不同 .