关于MySQL INT类型长度的疑惑

  • 疑惑一:int长度默认为11?

  • 疑惑二:int(x),x是代表数值长度?如果插入一条记录为9位数值到int(4)类型的字段中,插入操作能否成功?如果插入操作成功,查询出来的值是多少?

 

在MySQL中关于int(x)有一个普遍的误解,就是认为该列是可以存储x位数字的最大数值,事实上不是这样,int(x)不能代表可以存储在该列的最大值,这里的x表示的是整数列显示的宽度,不会限制存储数值的范围;而字符列如char(x),varchar(x)这种,数字是表示可以存储的字符长度;

 

每种整数类型所需的存储空间和范围 [官方文档: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]

ypeStorage (Bytes)Minimum Value SignedMinimum Value UnsignedMaximum Value SignedMaximum 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位

 

关于int(x)的使用 [官方文档: https://dev.mysql.com/doc/refman/5.7/en/numeric-type-attributes.html]

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.virendrachandak.com/techtalk/mysql-int11-what-does-it-means/

   https://www.jianshu.com/p/61293b416335

  

 

 

原文地址:https://www.cnblogs.com/coder-zyc/p/14258821.html