学习MySQL的BININT类型和其各种属性的范围

879 阅读4分钟

本文重点介绍了MySQL的BIGINT数据类型,并研究了我们如何使用它来存储整数值。我们还将学习它的范围、存储大小和各种属性,包括有符号、无符号和零填充。

MySQL BIGINT

BIGINT是一个b字节或64位的整数值,对于存储巨大的整数值非常有用。

MySQL BIGINT,像任何其他MySQL整数数据类型一样,可以是有符号或无符号的。有符号的数据类型表明该列可以存储正和负的整数值。这是MySQL中大多数整数类型的默认类型。因此,除非明确指定,任何整数类型的列都可以存储正数和负数。

另一方面,无符号数据类型表明该列只能存储正整数值。

有符号的MySQL BIGINT类型的范围是-9223372036854775808和9223372036854775807之间

对于无符号BIGINT类型,其数值范围为0至18446744073709551615。

BIGINT类型的另一个属性是ZEROFILL。在一个列上指定了这个属性后,该列会自动被设置为无符号。

zerofill属性也是用零来填充空格。

例子

让我们看几个例子来说明如何使用BIGINT类型。

CREATE DATABASE IF NOT EXISTS integers;
USE integers;

接下来,让我们创建一个表,并用各种BIGINT列来填充它,如下面的查询中所示。

CREATE TABLE examples(x BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, y BIGINT UNSIGNED, z BIGINT ZEROFILL );

例1
让我们首先尝试将所有的正值添加到表中。

INSERT INTO examples(x,y,z) VALUES (1,2,3);

在上面的查询示例中,这些值是可以接受的,因为它们都在有符号、无符号和零填充BIGINT类型的范围内。

SELECT * FROM examples;
+---+------+----------------------+
| x | y    | z                    |
+---+------+----------------------+
| 1 |    2 | 00000000000000000003 |
+---+------+----------------------+
1 row in <strong>set</strong> (0.01 sec)

例2
在下一个案例中,让我们尝试添加所有的负值。下面是一个查询的例子。

INSERT INTO examples(x,y,z) VALUES (-1,-2,-3);
ERROR 1264 (22003): Out of range value for column 'y' at row 1

在这种情况下,查询失败,因为y列是无符号的。因此,给该列分配一个负值就超出了该列的范围。

例3
我们可以观察到第三列的情况与上面类似。zerofill属性自动使这一列成为无符号的,因此添加一个负值就超出了范围。一个例子是这样的。

INSERT INTO examples(x,y,z) VALUES (-1,2,-3);
ERROR 1264 (22003): Out of range value for column 'z' at row 1

例4
现在让我们尝试增加每种类型的最大值。一个查询的例子是。

INSERT INTO examples(x,y,z) VALUES (-9223372036854775808, 9223372036854775808, 9223372036854775808);

在上面的例子中,由于所有的值都在范围内,查询成功执行。

考虑一下下面的查询。

INSERT INTO examples(x,y,z) VALUES (9223372036854775807, 9223372036854775808, 9223372036854775808);

你会注意到,所有的值都在最大值上。由于x列被设置为AUTO_INCREMENT,向其添加数值将会失败。

INSERT INTO examples(y,z) VALUES (9223372036854775808, 9223372036854775808);
ERROR 1062 (23000): Duplicate entry '9223372036854775807' for key 'examples.PRIMARY'

然而,如果在MySQL中禁用严格模式,你可以插入超出范围的值。

SELECT * FROM examples;

总结

在本教程中,我们讨论了MySQL的BININT类型和其各种属性的范围。