vlambda博客
学习文章列表

在MySQL添加字段时, int(m) 这个m的作用是什么?

在MySQL添加字段时, int(m) 这个m的作用是什么?

  对于这个问题,是考察你平时在工作中,有没有注意过MySQL的一些细节。这个也是平时容易忽略的,而在面试中会遇到的问题。

  我们在数据库中实践下,看这个M到底有什么作用:

  首先创建一个表:

  

  其中total_quantity 字段 定义的长度是4,插入数字50000,看能不能保存:

  在MySQL添加字段时, int(m) 这个m的作用是什么?

  从这个运行结果可以看出,定义的是4位,但5位数也可以保存,这说明:int数据类型设置的长度与实际存储大小没有关系。

  思考一下,这个m到底有什么作用?(在验证的时候需增加一个属性zerofil,便于观察)

  在custom_order 中增加一个int类型的字段(number):

  在MySQL添加字段时, int(m) 这个m的作用是什么?

  在给该字段设置一个为5的值,看看结果:

  

  从结果可以看出,number显示的是一个以0补充的5位的值,这说明,int(m) 中m的作用是用来显示长度;(注:未设置zerofill属性,看不出区别)

  查询Mysql手册,得到这样的一个结论:

  MySQL支持选择在该类型关键字后面的括号内指定的显示宽度(例如,INT(5))。该显示宽度规定--显示宽度小于指定的列宽度的值时从左侧补充宽度。显示宽度并不限制该列值的存储范围,也不限制超过列的指定宽度的值的显示。换句话说 int的长度并不影响数据的存储精度,长度只和显示有关

  zerofill的作用

  1、插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面以0来补充;

  2、当使用zerofill 时,默认会自动加unsigned(无符号)属性,使用unsigned属性后,数值范围是原值的2倍;

  到此还有一个问题,int数据类型设置长度与存储的大小没有关系,那int类型字段的存储大小是多少呢?

  关于这点,请看下表(来自Mysql手册):