-
疑惑一:int长度默认为11?
-
疑惑二:int(x),x是代表数值长度?如果插入一条记录为9位数值到int(4)类型的字段中,插入操作能否成功?如果插入操作成功,查询出来的值是多少?
每种整数类型所需的存储空间和范围 [官方文档:https://dev.mysql.com/doc/refman/5.7/en/integer-types.html]
[参考:https://stackoverflow.com/questions/5634104/what-is-the-size-of-column-of-int11-in-mysql-in-bytes]
ype | Storage (Bytes) | Minimum Value Signed | Minimum Value Unsigned | Maximum Value Signed | Maximum Value Unsigned |
---|---|---|---|---|---|
TINYINT |
1 | -128 |
0 |
127 |
255 |
SMALLINT |
2 | -32768 |
0 |
32767 |
65535 |
MEDIUMINT |
3 | -8388608 |
0 |
8388607 |
16777215 |
INT |
4 | -2147483648 |
0 |
2147483647 |
4294967295 |
BIGINT |
8 | -263 |
0 |
263-1 |
264-1 |
从上表可以看出INT是占4个字节大小,4Bytes -> 4 * 8 Bit ,通过换算,可以得出可以存储一个有符号的值 -2147483648 ~ 2147483647,无符号的值 0 ~ 4294967295;对于有符号的值的长度是11位,对于无符号的值的长度是10位,多的那个一位是符号位,当使用有符号展示的整数列宽带为11位,当使用无符号展示的整数列宽带位10位;
MySQL 支持用括号包含的数字指定整数数据类型的显示宽度, 比如 INT(4)
指定 INT
显示宽度为四位数,应用程序可以使用此可选的显示宽度来显示整数值,当该整数值的宽度小于为列指定的宽度,可用空格填充它们;
显示宽度也没有限制,可以被存储在列中的值的范围内,也不会阻止宽于列显示宽度的值正确显示。例如,指定为的列 SMALLINT(3)
具有通常 SMALLINT
的-32768-
32767
,并且超过三位的数字将完整显示三位数字所允许的范围之外的值;
如果配合 ZEROFILL
属性, 将用 0
来补齐. 比如 INT(4) ZEROFILL
字段, 数字 5
会被存储为 0005;
[参考:https://stackoverflow.com/questions/8892341/what-does-int5-in-mysql-mean]
除非列是UNSIGNED ZEROFILL,否则整数类型的列的显示宽度实际上不会执行任何操作;
创建一张zerofill_demo测试
CREATE TABLE zerofill_demo ( id INT(11) NOT NULL AUTO_INCREMENT, a INT(11) NOT NULL, b INT(11) UNSIGNED ZEROFILL NOT NULL, c INT(5) DEFAULT NULL, d INT(5) UNSIGNED ZEROFILL NOT NULL, e INT(15) DEFAULT NULL, PRIMARY KEY (`id`) ); INSERT INTO zerofill_demo (a, b, c, d, e) VALUES (1, 1, 1, 1, 1); INSERT INTO zerofill_demo (a, b, c, d, e) VALUES (1234567890, 1234567890, 1234567890, 1234567890, 1234567890);
参考:
https://www.jianshu.com/p/61293b416335