Quelle est la différence entre tinyint, smallint, mediumint, bigint et int dans MySQL?
Dans quels cas faut-il les utiliser?
Quelle est la différence entre tinyint, smallint, mediumint, bigint et int dans MySQL?
Dans quels cas faut-il les utiliser?
Réponses:
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 n'est pas 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" sont uniquement disponibles dans MySQL, et le reste utilise simplement les plages signées, à une exception notable: tinyint
dans SQL Server, il n'est pas signé et a une plage de valeurs de 0 à 255
la taille de stockage requise et la taille des nombres
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 numéro 1 dans les 4, mais un bigint utilisera 8 octets tandis qu'un tinyint utilisera 1 octet
Il semble s'agir de types de données MySQL.
Selon la documentation qu'ils prennent:
Et, naturellement, acceptez des plages 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 simplement être un excès ou une sous-utilisation. Par exemple, l'utilisation d'un type de données entier pour employeeCount dans un tableau indique que l'employé peut être un excès car il prend en charge une plage de valeurs entières de ~ 2 milliards à 2 milliards positifs ou de zéro à environ 4 milliards (non signé). Donc, même si vous considérez que l'un des plus gros employeurs des États-Unis, comme Walmart, avec environ 2,2 millions d'employés, 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 votre gamme est censée être inhabituellement grande, vous pourriez envisager un gros point qui, comme vous pouvez le voir chez Daniel '
La différence est la quantité de mémoire allouée à chaque entier et le nombre qu'ils peuvent chacun stocker.
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. Des 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;