Mysql——》int(1)和 int(10)区别

推荐链接:
    总结——》【Java】
    总结——》【Mysql】
    总结——》【Redis】
    总结——》【Kafka】
    总结——》【Spring】
    总结——》【SpringBoot】
    总结——》【MyBatis、MyBatis-Plus】
    总结——》【Linux】
    总结——》【MongoDB】
    总结——》【Elasticsearch】

不同类型的最大存储范围是不一样的。

类型单位(字节)有符号取值范围无符号取值范围
tinyint1-128 ~ 1270 ~ 255
smallint2-32768 ~ 327670 ~ 65535
mediumint3-8388608 ~ 83886070 ~ 16777215
int4-2147483648 ~ 21474836470 ~ 4294967295
integer4-2147483648 ~ 21474836470 ~ 4294967295
bigint8-9223372036854775808 ~ 92233720368547758070 ~ 18446744073709551615

1、UNSIGNED:无符号

表示不允许负值

Q:有符号 VS 无符号?
A:
相同:

  1. 相同的存储空间
  2. 相同的性能

不同:

  1. 不同的存储范围

2、ZEROFILL:填充零

如果数据宽度小于指定长度,则在数字前面填充零'0'
当使用zerofill 时,默认会自动加unsigned(无符号)属性。

3、长度

数值类型设置的长度并不影响该数值字段的取值范围,只是规定了用来显示字符的个数
长度只有在设置 ZEROFILL 即 “填充零” 后才有所意义。
比如 int(3) 存储 1 ,填充零时会填充为 001。

CREATE TABLE `test` (
  `num` int(3) DEFAULT NULL,
  `num_zerofill` int(3) unsigned zerofill DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='测试';


INSERT INTO  `test` (`num`, `num_zerofill`) VALUES (1, 1);
INSERT INTO  `test` (`num`, `num_zerofill`) VALUES (2, 2);
INSERT INTO  `test` (`num`, `num_zerofill`) VALUES (3, 3);
INSERT INTO  `test` (`num`, `num_zerofill`) VALUES (4, 4);
INSERT INTO  `test` (`num`, `num_zerofill`) VALUES (5, 5);

zerofill.png

4、总结

1.int后面的数字,不影响int本身支持的大小,int(1)、int(2)…int(10)没什么区别。
2.int后面的数字,配合zerofill一起使用才有效。
3.int(3) + zerofill实现了不足3位补0的现象,对于001,底层存储的还是1,只是在展示的会补0。