Qual è la differenza tra tinyint, smallint, mediumint, bigint e int in MySQL?
In quali casi devono essere utilizzati?
Qual è la differenza tra tinyint, smallint, mediumint, bigint e int in MySQL?
In quali casi devono essere utilizzati?
Risposte:
Occupano diverse quantità di spazio e hanno diversi intervalli di valori accettabili.
Ecco le dimensioni e gli intervalli di valori per SQL Server , altri RDBMS hanno una documentazione simile:
Risulta che usano tutti la stessa specifica (con alcune eccezioni minori indicate di seguito) ma supportano varie combinazioni di quei tipi (Oracle non incluso perché ha solo un NUMBER
tipo di dati, vedi il link sopra):
| 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
E supportano gli stessi intervalli di valori (con un'eccezione di seguito) e tutti hanno gli stessi requisiti di archiviazione:
| 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
I tipi "unsigned" sono disponibili solo in MySQL e gli altri usano solo gli intervalli firmati, con una notevole eccezione: tinyint
in SQL Server è unsigned e ha un intervallo di valori compreso tra 0 e 255
la dimensione della memoria richiesta e quanto grandi possono essere i numeri
su SQL Server
tinyint 1 byte, da 0 a 255
piccolo 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)
puoi memorizzare il numero 1 in tutti e 4, ma un bigint utilizzerà 8 byte mentre un tinyint utilizzerà 1 byte
Questi sembrano essere tipi di dati MySQL.
Secondo la documentazione che prendono:
E, naturalmente, accetta intervalli di numeri sempre più grandi.
Quando si arriva all'utilizzo nel mondo reale di questi tipi di dati, è molto importante comprendere che l'utilizzo di determinati tipi di numeri interi potrebbe essere solo un eccesso o un uso insufficiente. Ad esempio, l'utilizzo di un tipo di dati intero per employeeCount in una tabella indica che il dipendente potrebbe essere un 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). Pertanto, anche se si considera uno dei maggiori datori di lavoro degli Stati Uniti come Walmart con circa 2,2 milioni di dipendenti che utilizzano un tipo di dati intero per la colonna Employer Account non sarebbe necessario. In tal caso, ad esempio, si utilizza mediumint (che supporta da 0 a 16 milioni (senza segno)). Detto questo, se si prevede che il tuo raggio d'azione sia insolitamente ampio, potresti prendere in considerazione bigint che, come puoi vedere da Daniel '
La differenza è la quantità di memoria allocata a ciascun numero intero e la quantità che possono contenere ciascuno di essi.
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
L'esempio seguente crea una tabella usando 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;