Mysql
 sql >> Base de données >  >> RDS >> Mysql

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

Ils occupent différentes quantités d'espace et ont différentes plages de valeurs acceptables.

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

Il s'avère qu'ils utilisent tous 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 n'a qu'un NUMBER type de données, voir le lien ci-dessus):

             | 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

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 :

            | 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 

Les types "non signés" ne sont disponibles que dans MySQL, et les autres utilisent simplement les plages signées, à une exception notable :tinyint dans SQL Server n'est pas signé et a une plage de valeurs de 0 à 255