在MySQL添加字段时, int(m) 这个m的作用是什么?
在MySQL添加字段时, int(m) 这个m的作用是什么?
对于这个问题,是考察你平时在工作中,有没有注意过MySQL的一些细节。这个也是平时容易忽略的,而在面试中会遇到的问题。
我们在数据库中实践下,看这个M到底有什么作用:
首先创建一个表:
其中total_quantity 字段 定义的长度是4,插入数字50000,看能不能保存:
从这个运行结果可以看出,定义的是4位,但5位数也可以保存,这说明:int数据类型设置的长度与实际存储大小没有关系。
思考一下,这个m到底有什么作用?(在验证的时候需增加一个属性zerofil,便于观察)
在custom_order 中增加一个int类型的字段(number):
在给该字段设置一个为5的值,看看结果:
从结果可以看出,number显示的是一个以0补充的5位的值,这说明,int(m) 中m的作用是用来显示长度;(注:未设置zerofill属性,看不出区别)
查询Mysql手册,得到这样的一个结论:
MySQL支持选择在该类型关键字后面的括号内指定的显示宽度(例如,INT(5))。该显示宽度规定--显示宽度小于指定的列宽度的值时从左侧补充宽度。显示宽度并不限制该列值的存储范围,也不限制超过列的指定宽度的值的显示。换句话说 int的长度并不影响数据的存储精度,长度只和显示有关
zerofill的作用
1、插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面以0来补充;
2、当使用zerofill 时,默认会自动加unsigned(无符号)属性,使用unsigned属性后,数值范围是原值的2倍;
到此还有一个问题,int数据类型设置长度与存储的大小没有关系,那int类型字段的存储大小是多少呢?
关于这点,请看下表(来自Mysql手册):