Qual è la differenza tra tinyint, smallint, mediumint, bigint e int in MySQL?

Qual è la differenza tra tinyint, smallint, mediumint, bigint e int in MySQL?

In quali casi dovrebbero essere usati questi?

Occupano diverse quantità di spazio e hanno intervalli diversi di valori accettabili.

Ecco le dimensioni e gli intervalli di valori per SQL Server , altri RDBMS con documentazione simile:

  • MySQL
  • Postgres
  • Oracle (hanno solo un NUMBER dati NUMBER realtà)
  • DB2

Risulta che tutti usano la stessa specifica (con alcune eccezioni minori annotate di seguito) ma supportano varie combinazioni di questi tipi (Oracle non incluso perché ha solo un NUMBER dati NUMBER , vedi il link sopra):

  SQL Server MySQL Postgres DB2 tinyint XX smallint XXXX mediumint X int / integer XXXX bigint XXXX 

E supportano gli stessi intervalli di valori (con un’eccezione di seguito) e tutti hanno gli stessi requisiti di archiviazione:

  • tinyint : 1 byte , da -128 a +127 / 0 a 255 (senza segno)
  • smallint : 2 byte , da -32.768 a +32.767 / 0 a 65.535 (senza segno)
  • mediumint : 3 byte , da -8.388.608 a 8.388.607 / 0 a 16.777.215 (non firmato)
  • int / integer : 4 byte , da -2,147,483,648 a +2,147,483,647 / 0 a 4,294,967,295 (senza segno)
  • bigint : 8 byte , da -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807 / 0 a 18,446,744,073,709,551,615 (non firmato)

I tipi “non firmati” sono disponibili solo in MySQL e il resto usa solo gli intervalli firmati, con una sola eccezione notevole: tinyint in SQL Server è senza segno e ha un intervallo di valori compreso tra 0 e 255

la dimensione della memoria richiesta e quanto possono essere grandi i numeri

su SQL Server

tinyint 1 byte, da 0 a 255

smallint 2 byte, -2 ^ 15 (-32.768) a 2 ^ 15-1 (32.767)

int 4 byte, -2 ^ 31 (-2,147,483,648) a 2 ^ 31-1 (2.147.483.647)

bigint 8 byte, -2 ^ 63 (-9,223,372,036,854,775,808) a 2 ^ 63-1 (9,223,372,036,854,775,807)

è ansible memorizzare il numero 1 in tutti i 4, ma un bigint utilizzerà 8 byte mentre un minuscolo utilizzerà 1 byte

Quelli sembrano essere tipi di dati MySQL.

Secondo la documentazione che prendono:

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

E, naturalmente, accetta gamme di numeri sempre più grandi.

Quando si arriva all’utilizzo del mondo reale di questi tipi di dati, è molto importante capire che l’utilizzo di determinati tipi di interi potrebbe essere solo eccessivo o poco utilizzato. Ad esempio, l’utilizzo di un tipo di dati intero per employeeCount in una tabella indica che il dipendente potrebbe essere eccessivo poiché supporta un intervallo di valori interi da ~ 2 miliardi negativi a 2 miliardi positivi o da zero a circa 4 miliardi (senza segno). Quindi, anche se si considera uno dei maggiori datori di lavoro degli Stati Uniti come Walmart, circa 2,2 milioni di impiegati che utilizzano un tipo di dati intero per la colonna dipendenteCount non sarebbero necessari. In tal caso si usa mediumint (che supporta da 0 a 16 milioni (senza segno)) per esempio. Detto questo, se si prevede che il tuo range sia insolitamente grande, potresti considerare il bigint che, come puoi vedere dalle note di Daniel, supporta un intervallo più ampio di quello che tengo a decifrare.

La differenza è la quantità di memoria allocata a ciascun numero intero e la quantità di memoria che ognuno può memorizzare.

Tipo di dati 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 

Esempio

Nell’esempio seguente viene creata una tabella utilizzando i tipi di dati bigint, int, smallint e tinyint. I valori vengono inseriti in ogni colonna e restituiti nell’istruzione 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;