Quelle est la différence entre MySQL, tinyint, smallint, mediumint, bigint et int?
Dans quels cas faut-il les utiliser?
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
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
Celles-ci semblent être des types de données MySQL.
Selon le documentation ils prennent:
Et, naturellement, acceptez des gammes de nombres de plus en plus grandes.
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.
La différence correspond à la quantité de mémoire allouée à chaque entier et à la taille du nombre que chacun peut stocker.
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;