mysql中int(11)列的大小是多少?
int(11)
和可以存储在这些列中的最大值?
INT将始终是4个字节,无论指定了什么长度。
INT
TINYINT
SMALLINT
MEDIUMINT
BIGINT
长度只是指定在使用mysql命令行客户端选择数据时要填充多少字符。存储为int(3)的12345仍然会显示为12345,但如果存储为int(10),它仍然会显示为12345,但您可以选择填充前五位数字。例如,如果您添加了ZEROFILL,它将显示为0000012345。
int(3)
int(10)
ZEROFILL
... 最大值将是2147483647(有符号)或4294967295(无符号)
根据在这里, int(11)将占用4个字节的空间,即32位空间,其中2^(31) = 2147483648为最大值,-2147483648min为最小值。一位是符号。
2^(31) = 2147483648
-2147483648
在mysql中int(11)的列的大小是多少?
(11) - int数据类型的属性与列的大小无关。它只是整数数据类型的显示宽度。从# EYZ2:
(11)
int
MySQL支持一个扩展,可选地指定显示 base关键字后面括号中的整数数据类型的宽度 对于类型。例如,INT(4)指定带显示的INT 四个数字的宽度
INT (< em > x < / em >)将使只是在展示方面有所不同,即显示x位数字,而不限于11位。您可以使用ZEROFILL对它进行配对,它将在0的前面,直到它匹配您的长度。
对于任意数量的x在INT(x)中
INT(x)
INT(5)补零存储值为32将显示00032 存储值为32的INT (5)将显示32 INT将显示32
INT(3)补零存储值为250000将显示250000 存储值为250000的INT (3)将显示250000 INT将显示250000
存储在数据库中的实际值不受影响,大小仍然相同,任何计算都将正常进行。
这也适用于BIGINT, MEDIUMINT, SMALLINT和TINYINT。
我认为int(11)的最大值是4294967295
4294967295是答案,因为int(11)显示最多11位数字IMO
在MySQL中,整数int(11)的大小为4字节,等于32位。
签名值为:-2^(32-1) to 0 to 2^(32-1)-1 = # EYZ0 < / p >
2^(32-1) to 0 to 2^(32-1)-1
无符号值是:0 to 2^32-1 = # EYZ0 < / p >
0 to 2^32-1
虽然这个答案不太可能出现,但我认为有必要进行以下澄清:
主要参考:https://blogs.oracle.com/jsmyth/entry/what_does_the_11_mean
一个很好的解释是< A href="https://web.archive.org/web/20161222191854/http://waynewhitty.ie/blog-post.php?id=19" rel="noreferrer">在这里 总结一下:int(N)中的数字N经常与允许列的最大大小相混淆,就像在varchar(N)的情况下一样。但这不是整数数据类型的情况- 括号中的数字N不是列的最大大小,而只是一个参数,告诉MySQL当通过MySQL控制台查看表的数据时(当你使用ZEROFILL属性时)显示列的宽度。 < br > < br > 括号中的数字将告诉MySQL用多少个零填充传入的整数。例如:如果你在一个被设置为INT(5)的列上使用ZEROFILL,并且插入了数字78,MySQL将用0填充该值,直到数字满足括号中的数字。比如78会变成00078,127会变成00127。总而言之:括号内的数字用于显示 在某种程度上,括号中的数字是无用的,除非你使用ZEROFILL属性 因此,int的大小将保持不变,即-2147483648到2147483648为签名和0到4294967295为unsigned(~ 21.5亿和42亿,这是开发人员仍然不知道括号中数字N背后的故事的原因之一,因为它几乎不影响数据库,除非它包含超过20亿行),从字节方面来看,它将是4个字节.
有关整数类型大小/范围的更多信息,请参阅MySQL手册
正如其他人所说,列可以存储的最小/最大值以及以字节为单位占用多少存储空间仅由类型定义,而不是长度。
很多答案都说(11)部分只影响显示宽度,这并不完全正确,但主要是这样。
int(2)和没有指定零填充的定义如下:
int(2)
100
0
00
(2)唯一要做的就是如果还指定了zerofill:
(2)
1
01
了解所有细微差别的最佳方法是运行:
CREATE TABLE `mytable` ( `id` int(11) NOT NULL AUTO_INCREMENT, `int1` int(10) NOT NULL, `int2` int(3) NOT NULL, `zf1` int(10) ZEROFILL NOT NULL, `zf2` int(3) ZEROFILL NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `mytable` (`int1`, `int2`, `zf1`, `zf2`) VALUES (10000, 10000, 10000, 10000), (100, 100, 100, 100); select * from mytable;
它将输出:
+----+-------+-------+------------+-------+ | id | int1 | int2 | zf1 | zf2 | +----+-------+-------+------------+-------+ | 1 | 10000 | 10000 | 0000010000 | 10000 | | 2 | 100 | 100 | 0000000100 | 100 | +----+-------+-------+------------+-------+
这个答案是在Linux的MySQL 5.7.12上测试的,在其他实现中可能有变化,也可能没有变化。
根据这个书:
MySQL允许您为整数类型指定一个“宽度”,例如INT(11)。 对于大多数应用程序来说,这是没有意义的:它没有限制 合法的值范围,但只是指定字符的数量 MySQL的交互工具将保留用于显示目的。为 INT(1)与INT(20)相同。