推荐链接:
总结——》【Java】
总结——》【Mysql】
总结——》【Redis】
总结——》【Kafka】
总结——》【Spring】
总结——》【SpringBoot】
总结——》【MyBatis、MyBatis-Plus】
总结——》【Linux】
总结——》【MongoDB】
总结——》【Elasticsearch】
文章名称
- 1、UNSIGNED:无符号
- 2、ZEROFILL:填充零
- 3、长度
- 4、总结
不同类型的最大存储范围是不一样的。
类型 | 单位(字节) | 有符号取值范围 | 无符号取值范围 |
---|---|---|---|
tinyint | 1 | -128 ~ 127 | 0 ~ 255 |
smallint | 2 | -32768 ~ 32767 | 0 ~ 65535 |
mediumint | 3 | -8388608 ~ 8388607 | 0 ~ 16777215 |
int | 4 | -2147483648 ~ 2147483647 | 0 ~ 4294967295 |
integer | 4 | -2147483648 ~ 2147483647 | 0 ~ 4294967295 |
bigint | 8 | -9223372036854775808 ~ 9223372036854775807 | 0 ~ 18446744073709551615 |
1、UNSIGNED:无符号
表示不允许负值
。
Q:有符号 VS 无符号?
A:
相同:
相同的存储空间
相同的性能
不同:
不同的存储范围
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);
4、总结
1.int后面的数字,不影响int本身支持的大小,int(1)、int(2)…int(10)没什么区别。
2.int后面的数字,配合zerofill一起使用才有效。
3.int(3) + zerofill实现了不足3位补0的现象,对于001,底层存储的还是1,只是在展示的会补0。