Was ist der Unterschied zwischen tinyint, smallint, mediumint, bigint und int in MySQL?
In welchen Fällen sollten diese verwendet werden?
Was ist der Unterschied zwischen tinyint, smallint, mediumint, bigint und int in MySQL?
In welchen Fällen sollten diese verwendet werden?
Antworten:
Sie nehmen unterschiedlich viel Platz ein und haben unterschiedliche Bereiche akzeptabler Werte.
Hier sind die Größen und Wertebereiche für SQL Server , andere RDBMS haben eine ähnliche Dokumentation:
Es stellt sich heraus, dass alle dieselbe Spezifikation verwenden (mit einigen kleinen Ausnahmen, die unten angegeben sind), aber verschiedene Kombinationen dieser Typen unterstützen (Oracle nicht enthalten, da es nur einen NUMBER
Datentyp hat, siehe obigen Link):
| 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
Und sie unterstützen dieselben Wertebereiche (mit einer Ausnahme unten) und haben alle dieselben Speicheranforderungen:
| 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
Die "vorzeichenlosen" Typen sind nur in MySQL verfügbar, und der Rest verwendet nur die vorzeichenbehafteten Bereiche, mit einer bemerkenswerten Ausnahme: tinyint
In SQL Server ist vorzeichenlos und hat einen Wertebereich von 0 bis 255
die Größe des benötigten Speichers und wie groß die Anzahl sein kann
auf SQL Server
tinyint 1 Byte, 0 bis 255
smallint 2 Bytes, -2 ^ 15 (-32.768) bis 2 ^ 15-1 (32.767)
int 4 Bytes, -2 ^ 31 (-2,147,483,648) bis 2 ^ 31-1 (2,147,483,647)
Bigint 8 Bytes, -2 ^ 63 (-9,223,372,036,854,775,808) bis 2 ^ 63-1 (9,223,372,036,854,775,807)
Sie können die Nummer 1 in allen 4 speichern, aber ein Bigint verwendet 8 Bytes, während ein Winzling 1 Byte verwendet
Dies scheinen MySQL-Datentypen zu sein.
Laut der Dokumentation nehmen sie:
Und akzeptieren Sie natürlich immer größere Zahlenbereiche.
Wenn es um die reale Verwendung dieser Datentypen geht, ist es sehr wichtig, dass Sie verstehen, dass die Verwendung bestimmter ganzzahliger Typen nur ein Overkill oder eine Unteranwendung sein kann. Wenn Sie beispielsweise den Integer-Datentyp für employeeCount in einer Tabelle verwenden, könnte der Mitarbeiter ein Overkill sein, da er einen Bereich von Integer-Werten von ~ minus 2 Milliarden bis positiv 2 Milliarden oder null bis ungefähr 4 Milliarden (ohne Vorzeichen) unterstützt. Selbst wenn Sie einen der größten Arbeitgeber der USA wie Walmart mit etwa 2,2 Millionen Mitarbeitern in Betracht ziehen, wäre die Verwendung eines ganzzahligen Datentyps für die Spalte employeeCount unnötig. In einem solchen Fall verwenden Sie beispielsweise mediumint (das 0 bis 16 Millionen (ohne Vorzeichen) unterstützt). Wenn jedoch erwartet wird, dass Ihre Reichweite ungewöhnlich groß ist, können Sie Bigint in Betracht ziehen, wie Sie an Daniel sehen können.
Der Unterschied besteht in der Größe des Speichers, der jeder Ganzzahl zugewiesen ist, und in der Größe, die jede Zahl speichern kann.
Datentyp Bereichsspeicherung
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
Beispiel
Im folgenden Beispiel wird eine Tabelle mit den Datentypen bigint, int, smallint und tinyint erstellt. Werte werden in jede Spalte eingefügt und in der SELECT-Anweisung zurückgegeben.
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;