MySQL中tinyint, smallint, mediumint, bigint和int的区别是什么?
在什么情况下应该使用这些?
MySQL中tinyint, smallint, mediumint, bigint和int的区别是什么?
在什么情况下应该使用这些?
当前回答
所需存储空间的大小以及数字的大小。
SQL Server:
Tinyint 1字节,0 ~ 255 Smallint 2字节,-215(-32,768)到215-1 (32,767) Int 4字节,-231(- 2147,483,648)到231-1 (2147,483,647) Bigint 8字节,-263(-9,223,372,036,854,775,808)到263-1 (9,223,372,036,854,775,807)
你可以将数字1存储在所有4个字节中,但是bigint将使用8个字节,而tinyint将使用1个字节。
其他回答
区别在于分配给每个整数的内存数量,以及它们各自可以存储多大的数字。
这些似乎是MySQL数据类型。
根据他们拿到的文件:
Tinyint = 1字节 Smallint = 2字节 Mediumint = 3字节 Int = 4字节 Bigint = 8字节
并且,自然地,接受越来越大范围的数字。
所需存储空间的大小以及数字的大小。
SQL Server:
Tinyint 1字节,0 ~ 255 Smallint 2字节,-215(-32,768)到215-1 (32,767) Int 4字节,-231(- 2147,483,648)到231-1 (2147,483,647) Bigint 8字节,-263(-9,223,372,036,854,775,808)到263-1 (9,223,372,036,854,775,807)
你可以将数字1存储在所有4个字节中,但是bigint将使用8个字节,而tinyint将使用1个字节。
数据类型范围存储
bigint -2^63 (-9,223,372,036,854,775,808) to 2^63-1 (9,223,372,036,854,775,807) 8 Bytes
int -2^31 (-2,147,483,648) to 2^31-1 (2,147,483,647) 4 Bytes
smallint -2^15 (-32,768) to 2^15-1 (32,767) 2 Bytes
tinyint 0 to 255 1 Byte
例子
下面的示例使用bigint、int、smallint和tinyint数据类型创建一个表。值被插入到每一列中,并在SELECT语句中返回。
CREATE TABLE dbo.MyTable
(
MyBigIntColumn bigint
,MyIntColumn int
,MySmallIntColumn smallint
,MyTinyIntColumn tinyint
);
GO
INSERT INTO dbo.MyTable VALUES (9223372036854775807, 214483647,32767,255);
GO
SELECT MyBigIntColumn, MyIntColumn, MySmallIntColumn, MyTinyIntColumn
FROM dbo.MyTable;
它们占用不同的空间,它们有不同的可接受值范围。
下面是SQL Server的值的大小和范围,其他rdbms也有类似的文档:
MySQL Postgres Oracle(他们只有NUMBER数据类型) DB2
事实证明,它们都使用相同的规范(下面指出了一些小的例外),但支持这些类型的各种组合(Oracle不包括在内,因为它只有一个NUMBER数据类型,请参阅上面的链接):
| SQL Server MySQL Postgres DB2
---------------------------------------------------
tinyint | X X
smallint | X X X X
mediumint | X
int/integer | X X X X
bigint | X X X X
它们支持相同的值范围(下面有一个例外),并且都有相同的存储需求:
| Bytes Range (signed) Range (unsigned)
--------------------------------------------------------------------------------------------
tinyint | 1 byte -128 to 127 0 to 255
smallint | 2 bytes -32768 to 32767 0 to 65535
mediumint | 3 bytes -8388608 to 8388607 0 to 16777215
int/integer | 4 bytes -2147483648 to 2147483647 0 to 4294967295
bigint | 8 bytes -9223372036854775808 to 9223372036854775807 0 to 18446744073709551615
“unsigned”类型仅在MySQL中可用,其余类型仅使用带符号的范围,只有一个显著的例外:SQL Server中的tinyint是无符号的,其值范围为0到255