int(11)
和 int(11) UNSIGNED
有什么区别?
UNSIGNED类型不能为负数,但从另一方面来说,它对于正整数的范围是有两倍大的。TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT这些类型都有带符号和无符号版本。
对于INT类型,其范围定义如下:
Type Storage Min Max
INT 4 -2147483648 2147483647
INT UNSIGNED 4 0 4294967295
有符号和无符号类型占用相同的存储空间(INT为4个字节)。
更多详细信息请参阅文档。
INT的取值范围是从-2147483648
到+2147483647
UNSIGNED INT的取值范围是从0
到4294967295
花括号中的11
对数字本身没有影响,只是影响了它的显示方式。
UNSIGNED表示它只能存储非负值,即它不能存储例如-20
。
UNSIGNED
就是不带符号的正数。字节大小相同,但如果你的数据永远不会为负数,你可以获得更大的正数。11 是默认获取和显示的字符数。对于精确的大小,请搜索您正在使用的 DBMS 和类型。
所有整数类型都可以有一个可选(非标准)的 UNSIGNED 属性。无符号类型可用于在列中仅允许非负数或当您需要更大的数字范围时使用该列。例如,如果 INT 列是 UNSIGNED,则该列的范围大小相同,但其端点从 -2147483648 和 2147483647 移动到 0 和 4294967295。
请参阅这里:http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html
我想你可能想知道int和int(10)之间的区别。
我们来举一个带有zerofill关键字和不带的int(10)的例子,表格如下:
create table tb_test_int_type(
int_10 int(10),
int_10_with_zf int(10) zerofill,
unit int unsigned
);
。
insert into tb_test_int_type(int_10, int_10_with_zf, unit)
values (123456, 123456,3147483647), (123456, 4294967291,3147483647)
;
select * from tb_test_int_type;
# int_10, int_10_with_zf, unit
'123456', '0000123456', '3147483647'
'123456', '4294967291', '3147483647'
使用关键字zerofill
,当数字小于10时会填充0,否则不会。
其次,使用关键字zerofill
,int_10_with_zf变成了无符号整型,如果插入负数会出现错误Out of range value for column.....
。但是你可以向int_10插入负数。另外,如果你向int_10插入4294967291,也会出现错误Out of range value for column.....
没有关键字zerofill
的int(X)等同于int范围-2147483648~2147483647
有关键字zerofill
的int(X)字段等同于无符号整型范围0~4294967295,如果数字长度小于X,它将在左侧填充0
无符号整数可以处理从0到2^(整数字段位数)的值。有符号整数可以处理从-2^(整数字段位数-1)到2^(整数字段位数-1)-1的值。
ZEROFILL
,数字 11 只会影响“显示”的整数宽度,否则它没有明显的影响。 - New Guyint(11)
不也限制它只有 11 个字符吗? - Ben