首页 文章

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

提问于
浏览
315

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

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

6 回答

  • 507

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

    Here are the sizes and ranges of values for 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
    

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

    | 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中可用,其余类型仅使用有符号范围,但有一个值得注意的例外: tinyint in SQL Server is unsigned ,其值范围为0到255

  • 27

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

    在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个字节

  • 11

    那些似乎是MySQL数据类型 .

    根据documentation他们采取:

    • tinyint = 1个字节

    • smallint = 2个字节

    • mediumint = 3个字节

    • int = 4个字节

    • bigint = 8个字节

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

  • 3

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

  • 8

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

  • 2

    数据类型范围存储

    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
    

    Example

    以下示例使用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;
    

相关问题