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

Sei*_*aft 353 mysql integer

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

在什么情况下应该使用它们?

Dan*_*olo 556

它们占用不同的空间,并且具有不同的可接受值范围.

以下是SQL Server的值的大小和范围,其他RDBMS具有类似的文档:

事实证明它们都使用相同的规范(除了下面提到的一些小例外),但支持这些类型的各种组合(不包括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
Run Code Online (Sandbox Code Playgroud)

它们支持相同的值范围(下面有一个例外),并且都具有相同的存储要求:

            | 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 
Run Code Online (Sandbox Code Playgroud)

"unsigned"类型仅在MySQL中可用,其余只使用带符号的范围,但有一个值得注意的例外:tinyint在SQL Server中是无符号的,其值范围为0到255

  • 我不知道无符号类型只在MySQL中可用,这是MySQL相对于其他RDBMS的巨大优势.自这个答案发布之日以来有什么变化吗? (21认同)
  • @Pacerier可能他们不知道如何命名:)) (9认同)
  • 他们应该称**一个bigint而不是bigint,一个humongousint. (5认同)
  • greatint可能是一个选择,甲骨文是一家美国公司.:) (4认同)
  • @Daniel, What are they thinking, why is there one for 3 bytes but none for 6 bytes? (3认同)

SQL*_*ace 29

所需的存储空间大小以及数量可以达到多大

在SQL Server上

tinyint 1个字节,0到255

smallint 2字节,-2 ^ 15(-32,768)到2 ^ 15-1(32,767)

int 4字节,-2 ^ 31(-2,147,483,648)到2 ^ 31-1(2,147,483,647)

bigint 8字节,-2 ^ 63(-9,223,372,036,854,775,808)到2 ^ 63-1(9,223,372,036,854,775,807)

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


ANe*_*ves 13

那些似乎是MySQL数据类型.

根据他们的文件:

  1. tinyint = 1个字节
  2. smallint = 2个字节
  3. mediumint = 3个字节
  4. int = 4个字节
  5. bigint = 8个字节

并且,自然地,接受越来越大的数字范围.


小智 8

当它实际使用这些数据类型时,了解使用某些整数类型可能只是一种过度杀伤或使用不足是非常重要的.例如,在表中使用employeeCount的整数数据类型表示员工可能是一种矫枉过正,因为它支持从负20亿到正20亿或从零到大约40亿(无符号)的整数值范围.因此,即使您考虑使用沃尔玛这样的美国最大雇主之一,大约有220万名雇员使用employeeCount列的整数数据类型也是不必要的.在这种情况下,您可以使用mediumint(支持0到1600万(无符号)).话虽如此,如果您的范围预计会非常大,您可能会考虑使用bigint,正如您从丹尼尔的笔记中看到的那样,支持的范围大于我要解密的范围.

  • 以沃尔玛拥有220万活跃员工的示例为例-我认为,如果员工流动率每年约为50%,则EmployeeID上的INT类型将是最低要求。你们怎么想 理所当然-对于大多数普通公司而言,INT类型将是一种过大的杀伤力! (2认同)