1.起因
为什么想起来看这个问题,是最近有同事问mysql的init类型的字段长度的问题,他问int(1)和int(10)是什么意思,是字段长度越大,能存储的数字越大么?咋一问,还有点懵,从惯性思维来看,确实应该是这样。那么,实际情况是什么样的呢?这里直接通过实验来试一下。
2.设置int类型的长度为1
CREATE TABLE `t_student` (`id` int(1) NOT NULL AUTO_INCREMENT COMMENT 'ID编号',`name` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '学生姓名',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
然后插入一条数据:
INSERT INTO t_student values(1000001,'张三');
竟然能够插入成功。
3. 设置int类型的长度为10,并且加入zerofill参数
CREATE TABLE `t_supder_student` (`id` int(10) zerofill NOT NULL AUTO_INCREMENT COMMENT 'ID编号',`name` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '学生姓名',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
然后插入一条数据
INSERT INTO t_supder_student values(1,'李四');
我们可以看到,虽然我们插入的是1,但是显示的是1前面补充了9个0,到现在我似乎就明白了,int类型的长度不是指的能存多大的数据,而是在与zerofill联合使用的时候,可以进行0填充。
4.注意事项
以上的示例都是在MySQL Workbench上操作的。对于navcat或者其他一些客户端,查询显示的时候,会把补充的0给去掉,导致看不到真实的效果。
5.小结
int后面的数字不能表示字段的长度,int(num)一般加上zerofill,才有效果。