mysql数据库作为当前常用的关系型数据库,肯定会遇到设计表的需求,下面对设计表时int类型的设置进行分析。
如对用户表user添加一个user_id字段,数据类型为int,设置为:int(1);
mysql中int占4个字节,每个字节为8位(二进制中的8位),那么无符号int的最大值为2^32-1=4294967295,达到40亿,难道用了int(1),就不能存储这个最大值吗?
测试

CREATE TABLE `user` (
  `id` int(1) unsigned NOT NULL AUTO_INCREMENT,
   PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
INSERT INTO `user` (`id`) VALUES (4294967295);

在这里插入图片描述
可以看到id字段为无符号的int(1),插入最大值执行成功,那么int(1)里面的数字没有影响int本身支持的大小,可以存储最大值。

那么里面的1代表什么?通常设置的int(11)代表什么?
一般int里面的数字配合zerofill一起使用才有效。
测试

CREATE TABLE `user` (
  `id` int(4) unsigned zerofill NOT NULL AUTO_INCREMENT,
   PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
INSERT INTO `user` (`id`) VALUES (1),(10),(100),(1000),(10000);

在这里插入图片描述
可以看到id字段为int(4),且后面加了个 zerofill,分别插入了1,10,100,1000,10000,通过结果可以发现int(4)+zerofill实现了不足4位补0的现象,单独int(4)是没有用的,即里面的数字是没有用的。
所以,int(1)里面的1不能表示字段的长度,int(n)加上zerofill才有效果,实现零填充。
通常设置的int(11)加上zerofill后表示长度为11位,若不足11位则用0填充。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐