本文重点介绍了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类型和其各种属性的范围。