在之前的認知中 tinyint(4)、smallint(6)、mediumint(9)、int(11)、bigint(20) 這幾個類型后面的M值是代碼數(shù)字能存儲的最大長度
| 類型 | 占用字節(jié) | 從 | 到 |
|---|---|---|---|
| tinyint | 1 | -128 | 127 |
| smallint | 2 | -32768 | 32767 |
| mediumint | 3 | -8388608 | 8388607 |
| int | 4 | -2147483648 | 2147483647 |
| bigint | 8 | -9223372036854775808 | 9223372036854775807 |
創(chuàng)建數(shù)據(jù)庫表的例子
CREATE TABLE test(
id1 int(1),
id2 tinyint(1)
);
然后執(zhí)行插入數(shù)據(jù)
INSERT INTO test(id1,id2) values(127,127); -- 正常
INSERT INTO test(id1,id2) values(128,127); -- 正常
INSERT INTO test(id1,id2) values(127,128); -- 插入正常(但是在表中的數(shù)據(jù)是127,127)

image.png
從例子中可以看出來,其實和M值是沒有關系的,例如int真正所占用的空間還是4個字節(jié),tinyint所占用的字節(jié)還是1個字節(jié)。
tinyint(1) 和 tinyint(4) 中的1和4并不表示存儲長度,M不代表占用空間的容量,而是代表最小顯示位數(shù),只有字段指定zerofill是有用。
如tinyint(4),如果實際值是2,如果列指定了zerofill,查詢結(jié)果就是0002,左邊用0來填充。
所以,這些字段用默認長度就可以了,不需要在自己去設置長度,基本沒用,而且還增加了表字段類型的多樣化。
varchar(M)中的M是字符串的長度,所以mysql開發(fā)中需要區(qū)分整數(shù)類型和字符串類型的區(qū)別。
轉(zhuǎn)自:https://blog.csdn.net/qq_15037231/article/details/79481204
https://blog.csdn.net/jaryle/article/details/52025023