设置 int 型的时候, 需要设置 int(M), 以前知道这个 M 最大是 255, 但是到底应该设置多少并没有在意. 注意 zerofill, 今天我们来简单探讨下
我们在设计表的时候, 如果碰到需要设置 int(整型)的时候, 通常会按照惯例 (大家都这样写) 设置成 int(11). 那么这里为什么是 11 呢? 代表的又是什么呢?
以前我一直以为这里是在限制 int 显示的宽度, 后来仔细研究和通过上网查询发现, 事实并不是那样的.
确切的来说, 这里的 "宽度" 只是一个 "预期值", 它所代表的仅仅是你在设计数据表结构时, 想让该列日后显示的值宽度为多少, 但是具体存入值的宽度多少不会受任何影响.
当然, 它的作用不仅如此, 在存入数据的时候, 还是有一定区别的, 这一点可以通过设置字段的 zerofill 可以看出. 比如这里我们创建一个数据表, 结构如下:
- create table test (
- num int(5) zerofill
- );
上面代码创建一个名为 test 的表, 结构很简单, 表中只有一个名为 num 的字段, 类型为 int, 宽度为 5, 为了看出宽度方便, 我们又添加一个 zerofill 属性(该属性会让存入数值在不足宽度情况下, 左侧补 0)
然后我们开始插入数据:
- mysql> insert into test values(1),(11),(123),(12345),(123456),(1234567);
- Query OK, 6 rows affected (0.00 sec)
- Records: 6 Duplicates: 0 Warnings: 0
打印结果:
- mysql> select * from test;
- +---------+
- | num |
- +---------+
- | 00001 |
- | 00011 |
- | 00123 |
- | 12345 |
- | 123456 |
- | 1234567 |
- +---------+
- 6 rows in set (0.00 sec)
由以上结果, 不难看出, 如果字符少于设置 (期望值) 宽度, 在设置了 zerofill 属性的情况下, 左侧会统统补 0; 但是如果超出则不受任何影响. 也就是说这里的 int(m)中 m 只是一个预期值, 和真实数据宽度并没多大关系.
来源: http://www.bubuko.com/infodetail-2700358.html