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

2023-04-12  本文已影响0人  蓉漂里的小白

今天一个实习生问了我一个问题,他说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 版本问题还是哪里配置的问题,如果有了解的网友辛苦评论一把

上一篇 下一篇

猜你喜欢

热点阅读