web-dev-qa-db-fra.com

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

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

Dans quels cas faut-il les utiliser?

346
Sein Kraft

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

Voici les tailles et les plages de valeurs pour SQL Server , les 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 ne s'agit que d'un type de données NUMBER, 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 (avec une exception 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 "unsigned" ne sont disponibles que dans MySQL, les autres n'utilisant que les plages signées, à une exception près: tinyint dans SQL Server est unsigned et a une plage de valeurs de 0 à 255

543
Daniel DiPaolo

la taille de stockage requise 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 les 4, mais un bigint utilisera 8 octets tandis qu'un minuscule utilisera 1 octet

28
SQLMenace

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

Selon le documentation ils prennent:

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

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

12
ANeves

Lorsque vous parvenez à utiliser ces types de données dans le monde réel, il est très important que vous compreniez que l’utilisation de certains types d’entiers pourrait être excessive ou sous-utilisée. Par exemple, si vous utilisez un type de données entier pour employeeCount dans une table, employé peut constituer une surexploitation, car il prend en charge une plage de valeurs entières allant de -2 milliards environ à 2 milliards positifs ou de zéro à environ 4 milliards (non signé). Ainsi, même si vous considérez l'un des plus gros employeurs aux États-Unis, tel que Walmart, avec environ 2,2 millions d'employés, l'utilisation d'un type de données entier pour la colonne employeeCount serait inutile. Dans un tel cas, vous utilisez mediumint (qui prend en charge de 0 à 16 millions (non signé)) par exemple. Cela dit, si votre gamme est censée être exceptionnellement grande, vous pouvez envisager une résolution plus large qui, comme vous pouvez le constater dans les notes de Daniel, prend en charge une plage plus large que ce que je me charge de déchiffrer.

8
Anil M

La différence correspond à la quantité de mémoire allouée à chaque entier et à la taille du nombre que chacun peut stocker.

3
Alexsander Akers

Type de données Plage Stockage

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 utilisant les 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;
2
Vikram Rathaur