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