Quelle est la différence entre tinyint, smallint, mediumint, bigint et int dans MySQL?

Quelle est la différence entre tinyint, smallint, mediumint, bigint et int dans MySQL?

Dans quels cas devraient-ils être utilisés?

    Ils prennent des quantités d’espace différentes et ont des gammes de valeurs acceptables différentes.

    Voici les tailles et plages de valeurs pour SQL Server , les autres SGBDR ont une documentation similaire:

    • MySQL
    • Postgres
    • Oracle (ils ont juste un type de données NUMBER vraiment)
    • DB2

    Il s’avère que tous utilisent la même spécification (avec quelques exceptions mineures notées ci-dessous), mais prennent en charge diverses combinaisons de ces types (Oracle non inclus car il ne contient qu’un type de données NUMBER , voir le lien ci-dessus):

      SQL Server MySQL Postgres DB2 tinyint XX smallint XXXX mediumint X int / integer XXXX bigint XXXX 

    Et ils prennent en charge les mêmes plages de valeurs (à une exception près ci-dessous) et ont tous les mêmes exigences de stockage:

    • tinyint : 1 octet , -128 à +127 / 0 à 255 (non signé)
    • smallint : 2 octets , -32 768 à +32 767/0 à 65 535 (non signé)
    • mediumint : 3 octets , -8 388 608 à 8 388 607/0 à 16 777 215 (non signé)
    • integer / integer : 4 octets , -2 147 483 648 à +2 147 483 647/0 à 4 294 967 295 (non signé)
    • bigint : 8 octets , -9 223 372 036 854 775 808 à 9 223 372 036 854 775 807/0 à 18 446 744 073 709 551 615 (non signé)

    Les types “unsigned” ne sont disponibles que dans MySQL, et les autres utilisent uniquement les plages signées, à une exception près: tinyint dans SQL Server est non signé et a une plage de valeurs comprise entre 0 et 255.

    la taille de stockage requirejse et la taille des nombres peuvent être

    sur SQL Server

    tinyint 1 octet, 0 à 255

    smallint 2 octets, -2 ^ 15 (-32 768) à 2 ^ 15-1 (32 767)

    int 4 octets, -2 ^ 31 (-2 147 483 648) à 2 ^ 31-1 (2 147 483 647)

    bigint 8 octets, -2 ^ 63 (-9 223 372 036 854 775 808) à 2 ^ 63-1 (9 223 372 036 854 775 807)

    vous pouvez stocker le nombre 1 dans tous les 4, mais un bigint utilisera 8 octets alors qu’un tinyint utilisera 1 octet

    Celles-ci semblent être des types de données MySQL.

    Selon la documentation qu’ils prennent:

    1. tinyint = 1 octet
    2. smallint = 2 octets
    3. mediumint = 3 octets
    4. int = 4 octets
    5. bigint = 8 octets

    Et, naturellement, accepter des gammes de nombres de plus en plus grandes.

    Quand il s’agit de l’utilisation réelle de ces types de données, il est très important que vous compreniez que l’utilisation de certains types entiers pourrait être un peu exagérée ou sous-utilisée. Par exemple, l’utilisation d’un type de données entier pour employeeCount dans une table indique que l’employé peut être excessif, car il prend en charge une plage de valeurs entières allant de ~ 2 milliards à 2 milliards, voire zéro (non signé). Ainsi, même si vous considérez que l’un des plus gros employeurs des États-Unis, tel que Walmart, emploie environ 2,2 millions de personnes, utiliser un type de données entier pour la colonne employeeCount serait inutile. Dans un tel cas, vous utilisez par exemple mediumint (qui prend en charge de 0 à 16 millions (non signé)). Cela dit, si vous prévoyez que votre scope sera inhabituellement grande, vous pourriez envisager bigint qui, comme vous pouvez le voir sur les notes de Daniel, prend en charge une gamme plus large que je ne souhaite déchiffrer.

    La différence réside dans la quantité de mémoire allouée à chaque nombre entier et dans la taille de leur nombre.

    Type de données Range Storage

     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 

    Exemple

    L’exemple suivant crée une table à l’aide des types de données bigint, int, smallint et tinyint. Les valeurs sont insérées dans chaque colonne et renvoyées dans l’instruction 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;