int(11)在MySQL中意味着什么?

int(11)在MySQL中意味着什么?

关于int(11)在MySQL中的含义,一个非常常见的误解是,该列可以存储长度为11位的最大整数值。然而,事实并非如此。Int(11)不决定列可以存储的最大值。11是整型列的显示宽度,与字符列不同,其中数字表示可以存储的字符数。

括号中的数字不决定可以存储在整型字段中的最大值和最小值。可以存储的最大值和最小值总是固定的。下表显示了每种整数类型所需的存储空间和范围

TypeStorage (Bytes)Minimum Value SignedMinimum Value UnsignedMaximum Value SignedMaximum Value Unsigned
TINYINT1-1280127255
SMALLINT2-3276803276765535
MEDIUMINT3-83886080838860716777215
INT4-2147483648021474836474294967295
BIGINT8-2630263-1264-1

Source: Integer Types (Exact Value) – INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT

那么他是什么?

对于整数类型的列,括号中的数字称为字段的显示宽度。这与其他类型字段的含义不同。对于浮点类型,它是总位数。对于字符字段,它是可以存储的最大字符数,例如VARCHAR(20)可以存储20个字符。

列的显示宽度不会影响该列中可以存储的最大值。具有 INT(5) 或 INT(11) 的列可以存储相同的最大值。另外,如果您有一列 INT(20),这并不意味着您将能够存储 20 位数字值(BIGINT 值)。该列仍将仅存储直到 INT 的最大值。

默认情况下,每种整数类型的数量与该类型的最大负值中的字符数相同。整数的最大负值是 -2147483648,它是 11 个字符,因此默认显示宽度是 11。同样,对于 BIGINT,默认显示宽度是 20,它等于最大负 BIGINT 中的字符数 (-9223372036854775808)。

它有什么用?

整数类型列的显示宽度实际上不会执行任何操作,除非该列是 UNSIGNED ZEROFILL。在这种情况下,如果要存储的数字少于 11 个字符(对于 INT(11)),则这些数字将在左侧补零。ZEROFILL 隐式使列无符号,因此它不能存储负数,因此 ZEROFILL 列中没有负数。

下面是显示值如何影响 UNSIGNED ZEROFILL 列的示例。

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`)
)

Commands to insert data into the table:

+----+------------+-------------+------------+------------+------------+
| id | a          | b           | c          | d          | e          |
+----+------------+-------------+------------+------------+------------+
|  1 |          1 | 00000000001 |          1 |      00001 |          1 |
|  2 | 1234567890 | 01234567890 | 1234567890 | 1234567890 | 1234567890 |
+----+------------+-------------+------------+------------+------------+

以上内容有助于理解以下内容:

  • 如果列有ZEROFILL,它将始终存储该列的字符数。在我们的示例中,列b将始终存储至少11个字符的整数
  • 显示宽度不限制可以存储在列中的值。我们仍然可以将值存储到INT(5)列(在我们的示例中是c和d列)中允许的最大INT值为止。

如果字段不是UNSIGNED ZEROFILL,显示宽度的用途是什么

如果列不是UNSIGNED ZEROFILL, mysql命令行不使用显示宽度。但是,如果其他应用程序需要,也可以使用它。应用程序可以获取元数据以获取列的显示宽度,然后将其用于设置列的宽度或显示列中的数字等。下面是一个PHP示例,它可以用来显示表中的值,以便它们可以正确对齐和填充。

$result = $mysqli->query('SELECT e FROM zerofill_demo WHERE id = 1');
$metadata = $result->fetch_field_direct(0); // fetch metadata from first field (e)
$length = $metadata->length; // get the length from it
$row = $result->fetch_assoc();
printf("%$0{$length}d\n", $row['e']); // prints e in a column 15 chars wide

上面的代码将输出e的值:

000000000000001

翻译来源: https://www.virendrachandak.com/techtalk/mysql-int11-what-does-it-means/

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Bigint类型可以存储比int类型更大的整数,Bigint类型可以存储范围从-9223372036854775808到9223372036854775807之间的数字,而int类型只能存储范围从-2147483648到2147483647之间的数字。 ### 回答2: MySQL,bigintint是整数数据类型的两个选项。它们之间的区别如下: 1. 数据范围:bigint的取值范围更广,可以存储的整数范围从-2^63到2^63-1,而int的取值范围从-2^31到2^31-1。这意味着bigint可以存储更大的整数值。 2. 存储空间:bigint需要更多的存储空间来存储相同数量的数据。bigint使用8个字节(64位),而int只使用4个字节(32位)。因此,如果要存储更大的整数数据集,bigint会占用更多的磁盘空间。 3. 性能:由于bigint使用更多的存储空间,它可能会在大量数据处理时影响查询的性能。相比之下,int数据类型可以更快地执行查询操作。 4. 应用场景:由于bigint可以存储更大的整数值,所以在处理需要大范围整数的应用程序时更常见。例如,在存储用户ID时,bigint可能更合适,因为用户ID可能会非常庞大。 总的来说,bigintint之间的主要区别是存储范围和存储空间。根据具体的应用场景和需求,我们可以选择合适的数据类型来存储整数数据。 ### 回答3: BigIntInt都是MySQL的整数数据类型,不同之处在于它们的存储范围和占用空间。 1. 存储范围: - Int是一个4字节(32位)有符号整数,其存储范围为-2,147,483,648到2,147,483,647。 - BigInt是一个8字节(64位)有符号整数,其存储范围为-9,223,372,036,854,775,808到9,223,372,036,854,775,807。 2. 占用空间: - 由于BigInt的存储范围比Int更大,所以它需要更多的存储空间。Int占用4个字节(32位),而BigInt占用8个字节(64位)。 3. 适用场景: - 如果你的数据范围可以在Int的存储范围内完成,那么使用Int可能是更好的选择,因为它占用更少的空间。 - 如果你需要存储非常大的整数或需要更大的存储范围,那么使用BigInt是更合适的选择。 总结:BigInt提供了更大的存储范围,但相应地占用更多的存储空间。选择使用哪个数据类型取决于你的数据的范围和你对空间利用率的考虑。如果你不确定应该使用哪个数据类型,可以根据你的需求来评估并选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值