mysql中int类型占用4个字节,而一个字节占用8个比特位,所以一个int类型的字段会占用2的32次方,我们就能换算出int UNSIGNED(无符号)类型的能存储的最小值为0, 最大值为4294967295;有符号的时候存储是从-2147483647,到2147483647;由此可以发现,正好是10位的长度;所以int默认的长度就是10,但是最大的存储长度也是10。
接下来说int10和int11的区别
首先新建一个表test,表中有三个字段id,id1(10),id2(11)(id 假装是一个主键,可以忽略它)
在命令窗口执行命令 alter table test modify id2 int(12) zerofill;(如果int中不加具体的数值,则默认是10)
注:不能用navicat查看结果,navicat是自动过滤前面的0;
添加一条数据(1,1,1);
结果如下
可见宽度是不一样的,id1是10位,id2是是12位。
再来试一下如果插入超过10位的开头大于0的数值,看看结果
可见超出范围,原因就是开头说的最大值不能超过4294967295;
总结:
mysql中int(M)类型的字段最多可以存放10位长度的字段,但是如果小于最大值(4294967295)的情况下,前面用0补全(前提是该字段设置了zerofill属性),比如12345,那么int(11)则展示的是00000012345,比如12345678912,这种就不能存放了,原因是超过了最大值;M表示的是宽度,M最大是255;所以int10 和int11 的区别就是宽度不一致,设置字段的显示宽度并不限制字段存储值的范围,比如字段d设置为int(5),但是仍然可以存储1234567890这个10位数字;