很多小伙伴看到括号里面的长度值不同,会直接联想到字符类型括号里面的长度,以为括号里面的长度值不同,存储的数值范围也会不同。
其实这是非常错误的联想,因为对于整数类型来说,括号里面的长度值不同,仅仅代表显示长度不同,并不会影响实际的存储范围。
也就是说int(1),int(10)和int(11)这三个不仅占用的空间是一样的【都是占用4个字节】,储值范围也是一样的【int(1)无符号的情况下一样可以存储0到4294967295中的任意一个数值】。
那上面提到的显示长度不同是什么意思呢?
不知道大家平时用Navicat设计表添加和修改字段的时候有没有注意到“填充零”这个选项?
“填充零”这个选项只有当字段类型为数值类型的时候才能选择是否勾选,勾选了“填充零”选项的字段多了一个zerofill属性(该属性会判断储存的数值位数,如果储存的数值位数小于指定的长度,则会在该数值左侧填充0,使其达到指定长度;如果储存的数值位数大于或等于指定的长度,则不会进行填充0的操作)。
例如:储存99这个数值,当字段都勾选了“填充零”选项(也就是设置了zerofill属性)的时候
int(9),显示结果为000000099 int(3),显示结果为099 int(1),显示结果为99
而当字段没勾选“填充零”选项的时候
int(9),显示结果为99 int(3),显示结果为99 int(1),显示结果也是99
最后总结一下:数值类型设置不同长度【如:int(1),int(10)和int(11)】,如果没有设置zerofill属性(就是勾选“填充零”),那么它们没有任何区别;如果设置了zerofill属性,也就是显示长度不一样而已。