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

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

dans quels cas faut-il les utiliser?

312
demandé sur think123 2010-06-07 20:44:40

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

502
répondu Daniel DiPaolo 2010-06-08 15:11:01

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

27
répondu SQLMenace 2018-01-07 19:30:24

ce sont des types de données MySQL.

selon la documentation ils prennent:

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

et, naturellement, accepter des gammes de plus en plus grandes de nombres.

11
répondu ANeves 2010-06-07 16:51:01

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.

8
répondu Anil M 2014-10-28 16:23:17

La différence est la quantité de mémoire allouée à chaque entier, et comment un grand nombre ils peuvent stocker.

3
répondu Alexsander Akers 2010-06-07 16:45:55

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;
2
répondu Vikram Rathaur 2016-04-06 05:45:56