Quelle est la différence entre tinyint, smallint, mediumint, bigint et int en MySQL?
6 réponses
ils occupent des espaces différents et ont des plages de valeurs acceptables Différentes.
Voici les tailles et les plages de valeurs pour SQL Server , D'autres RDBMSes ont une documentation similaire:
S'avère qu'ils utilisent tous la même spécification (avec quelques exceptions mineures notées ci-dessous) mais supportent diverses combinaisons de ces types (Oracle non inclus parce qu'il a juste 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 supportent les mêmes gammes de valeurs (avec une exception ci-dessous) et tous ont les mêmes exigences de stockage:
-
tinyint
: 1 octet , -128 à +127 / 0 à 255 (non signé) -
smallint
: 2 octets , -32 768 to + 32 767 / 0 to 65 535 (unsigned) -
mediumint
: 3 octets , -8,388,608 à 8,388,607 / 0 à 16,777,215 (non signé) -
int
/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" non signés "ne sont disponibles qu'en MySQL, et le reste utilise simplement les plages signées, avec une exception notable: tinyint
en SQL Server est non signé et a une plage de valeurs de 0 à 255
la taille de stockage nécessaire et la taille des nombres peut être
on 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
ce sont des types de données MySQL.
selon la documentation ils prennent:
- tinyint = 1 byte
- smallint = 2 octets
- mediumint = 3 octets
- int = 4 octets
- bigint = 8 octets
et, naturellement, accepter des gammes de plus en plus grandes de nombres.
Lorsqu'il s'agit de l'utilisation de 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 tout simplement un surmenage ou sous-utilisé. Par exemple, en utilisant le type de données integer pour employeeCount dans une table disent employé pourrait être un excès de travail puisqu'il soutient une gamme de valeurs entières de ~ négatif 2 milliards à positif 2 milliards ou zéro à environ 4 milliards (non signé). Donc, même si vous considérez L'un des plus grands employeurs américains comme Walmart avec environ 2,2 millions d'employés utilisant un type de données entier pour la colonne employeeCount seraient inutiles. Dans un tel cas, vous utilisez mediumint (qui supporte de 0 à 16 millions (non signé)) par exemple. Cela dit, si votre portée est censée être anormalement grande, vous pourriez considérer bigint qui, comme vous pouvez le voir dans les notes de Daniel, supporte une portée plus grande que celle que je veux déchiffrer.
La différence est la quantité de mémoire allouée à chaque entier, et comment un grand nombre ils peuvent stocker.
type de Données Plage de 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 en utilisant les types de données bigint, int, smallint et tinyint. Les valeurs sont insérées dans chaque colonne et retourné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;