MySQL中的tinyint、smallint、mediumint、bigint和int有什么区别?

gmol1639  于 2023-10-15  发布在  Mysql
关注(0)|答案(6)|浏览(131)

MySQL中的tinyint、smallint、mediumint、bigint和int有什么区别?
在什么情况下应该使用这些?

jckbn6z7

jckbn6z71#

它们占用不同的空间,并且具有不同的可接受值范围。
Here are the sizes and ranges of values for 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

sxpgvts3

sxpgvts32#

所需的存储大小以及这些数字可以有多大
在SQL Server上:

  • tinyint 1字节,0到255
  • smallint 2字节,-215(-32,768)到215 -1(32,767)
  • int 4字节,-231(-2,147,483,648)到231 -1(2,147,483,647)
  • bigint 8字节,-263(-9,223,372,036,854,775,808)到263 -1(9,223,372,036,854,775,807)

您可以在所有4个中存储数字1,但bigint将使用8个字节,而tinyint将使用1个字节。

fjaof16o

fjaof16o3#

这些似乎是MySQL数据类型。
根据documentation他们采取:

  1. tinyint = 1字节
  2. smallint = 2字节
  3. mediumint = 3字节
  4. int = 4字节
  5. bigint = 8字节
    而且,自然地,接受越来越大的数字范围。
qnzebej0

qnzebej04#

当涉及到这些数据类型的真实的使用时,非常重要的一点是,您要理解使用某些整数类型可能会过度使用或使用不足。例如,在一个表中使用integer数据类型来表示employee的计数可能是一种矫枉过正的做法,因为它支持从负20亿到正20亿或从零到大约40亿(无符号)的整数值范围。因此,即使您考虑美国最大的雇主之一,如沃尔玛(Walmart),大约有220万名员工,使用整数数据类型作为“计数”列也是不必要的。在这种情况下,您可以使用mediumint(支持0到1600万(无符号))。话虽如此,如果你的范围预计将是异常大,你可以考虑bigint,正如你可以看到,从丹尼尔的笔记,支持一个范围大于我想破译。

ej83mcc0

ej83mcc05#

不同之处在于分配给每个整数的内存量,以及它们各自可以存储多大的数字。

s6fujrry

s6fujrry6#

数据类型范围存储

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;

相关问题