首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MySQL中的类型: BigInt(20) vs Int(20)

MySQL中的类型: BigInt(20) vs Int(20)
EN

Stack Overflow用户
提问于 2010-06-29 04:14:59
回答 5查看 248.4K关注 0票数 268

我想知道BigIntMediumIntInt之间的区别是什么…很明显,它们将允许更大的数字;但是,我可以创建一个Int(20)BigInt(20),这将使它看起来不一定与大小有关。

一些洞察力会很棒,只是有点好奇。我使用MySQL已经有一段时间了,并试图在选择类型时满足业务需求,但我从来没有理解过这一方面。

EN

回答 5

Stack Overflow用户

发布于 2010-06-29 04:19:57

类型声明中括号中的数字是显示宽度,它与可以存储在数据类型中的值的范围无关。仅仅因为您可以声明Int(20)并不意味着您可以在其中存储多达10^20的值:

...应用程序可以使用该可选的显示宽度来显示宽度小于为列指定的宽度的整数值,方法是向左填充空格。..。

显示宽度不限制可以存储在列中的值的范围,也不限制宽度超过为列指定的宽度的值所显示的位数。例如,指定为SMALLINT(3)的列通常的SMALLINT范围为-32768到32767,超出三个字符所允许的范围的值将使用三个以上的字符显示。

有关可以以每种MySQL数据类型存储的最大值和最小值的列表,请参见。

票数 44
EN

Stack Overflow用户

发布于 2010-06-29 04:22:31

Quote

"BIGINT(20)“规范不是数字限制。它只是意味着当显示数据时,如果它使用的数字少于20位,它将被用零填充。2^64是BIGINT类型的硬限制,本身就有20位数,因此BIGINT(20)只是意味着小于10^20的所有内容都将用空格左填充显示。

票数 19
EN

Stack Overflow用户

发布于 2017-10-12 22:14:17

据我所知,只有一个小的区别是当你尝试插入超出范围的值时。

在示例中我将使用401421228216,它是101110101110110100100011101100010111000 (length 39 characters)

  • 如果你有系统的INT(20),这意味着在内存中分配至少20位。但是,如果要插入大于2^20的值,则只有当它小于INT(32) -> 2147483647 (或UNSIGNED)

2 * INT(32) -> 4294967295 )时,才能成功存储该值

示例:

代码语言:javascript
复制
mysql> describe `test`;
+-------+------------------+------+-----+---------+-------+
| Field | Type             | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| id    | int(20) unsigned | YES  |     | NULL    |       |
+-------+------------------+------+-----+---------+-------+
1 row in set (0,00 sec)

mysql> INSERT INTO `test` (`id`) VALUES (401421228216);
ERROR 1264 (22003): Out of range value for column 'id' at row 1

mysql> SET sql_mode = '';
Query OK, 0 rows affected, 1 warning (0,00 sec)

mysql> INSERT INTO `test` (`id`) VALUES (401421228216);
Query OK, 1 row affected, 1 warning (0,06 sec)

mysql> SELECT * FROM `test`;
+------------+
| id         |
+------------+
| 4294967295 |
+------------+
1 row in set (0,00 sec)

  • 如果你有系统的BIGINT(20),这意味着在内存中分配至少20位。但是,如果您要插入大于2^20的值,如果它小于BIGINT(64) -> 9223372036854775807 (对于UNSIGNED)

,则为2 * BIGINT(64) -> 18446744073709551615

示例:

代码语言:javascript
复制
mysql> describe `test`;
+-------+---------------------+------+-----+---------+-------+
| Field | Type                | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+-------+
| id    | bigint(20) unsigned | YES  |     | NULL    |       |
+-------+---------------------+------+-----+---------+-------+
1 row in set (0,00 sec)

mysql> INSERT INTO `test` (`id`) VALUES (401421228216);
Query OK, 1 row affected (0,04 sec)

mysql> SELECT * FROM `test`;
+--------------+
| id           |
+--------------+
| 401421228216 |
+--------------+
1 row in set (0,00 sec)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3135804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档