Mysql:int int(3) int(10) 的区别

今天一个实习生问了我一个问题,他说int(3),int(4),int 有区别吗?
我:。。。没关注过呀?

1. 网上学习

于是上网各种查文章,总结了下面4条结论:

  1. int类型的字段就是占四个字节,一个字节8位,也就是4*8=32位。
  2. int 可表示的范围:有符号为[-2147483648,2147483647],无符号为[0, 4294967295]
  3. 不论是选择int(3)还是int(11),它在数据库里面存储的都是4个字节的长度
  4. 当int(3) 配合zerofill 使用时,如果你输入的数值是17,系统会默认为你存储值为017
    解释一下:这个3代表的仅是一个默认的长度,当不足3位时,系统会帮用零补全,当超过3位时,就没有任何的影响与副作用

2. 实践

收集好网上的结论后,进入了实测阶段

2.1 建表

CREATE TABLE `students` (
  `sId` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `sInt` INT DEFAULT NULL,
  `sInt_3` INT(3) ZEROFILL DEFAULT NULL,
  `sInt_10` INT(10) UNSIGNED DEFAULT NULL,
  `sInt_11` INT(11) ZEROFILL DEFAULT NULL,
  PRIMARY KEY (`sId`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;

2.2 验证网上结论

  1. 不用验证了,mysql 基础
  2. 创建一行数据,写入最大值,检查是否可以存储
INSERT into students values (1,2147483647,1,1,1)
image.png
  1. 创建一行数据,写入最大值,检查int(3)int(10)int(11)是否可以存储
INSERT into students values (3,2147483647,2147483647,2147483647,2147483647)
image.png
  1. 创建一行数据,int(3),int(10), int(11) 都写入17,检查存储结果
INSERT into students values (3,17,17,17,17)
image.png

总结:

  1. Int 后面加的数据,并不会影响int的存储范围,同时int后面加了范围后,需要配置zerofill 才会有效,常用于编号之中如学号之类

  2. 测试结果和网上说的有所不同,并没有实现int(3) zerofill 后,宽度就只显示3位,而是不管设置几,宽度都是10位,输入的值不足10位,前面用0补齐

  3. 所以不知道是我mysql 版本问题还是哪里配置的问题,如果有了解的网友辛苦评论一把

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容