Jaka jest różnica między tinyint, smallint, mediumint, bigint i int w MySQL?
Jaka jest różnica między tinyint, smallint, mediumint, bigint i int w MySQL?
W jakich przypadkach należy je stosować?
6 answers
Zajmują różne ilości miejsca i mają różne zakresy dopuszczalnych wartości.
Oto rozmiary i zakresy wartości dla SQL Server , Inne Rdbmsy mają podobną dokumentację:
Okazuje się, że wszystkie używają tej samej specyfikacji (z kilkoma drobnymi wyjątkami poniżej), ale obsługują różne kombinacje tych typów (Oracle nie jest dołączone, ponieważ ma tylko typ danych NUMBER
, patrz powyższy 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
I obsługują te same zakresy wartości (z jednym wyjątkiem poniżej) i wszystkie mają te same wymagania dotyczące przechowywania:
-
tinyint
: 1 bajt, -128 do + 127 / 0 do 255 (unsigned) -
smallint
: 2 bajty, -32,768 do + 32,767 / 0 do 65,535 (unsigned) -
mediumint
: 3 bajtów, -8,388,608 do 8,388,607 / 0 do 16,777,215 (unsigned) -
int
/integer
: 4 bajty, -2,147,483,648 do +2,147,483,647 / 0 do 4,294,967,295 (unsigned) -
bigint
: 8 bajty, -9,223,372,036,854,775,808 do 9,223,372,036,854,775,807 / 0 do 18,446,744,073,709,551,615 (unsigned)
Typy "niepodpisane" są dostępne tylko w MySQL, a pozostałe używają tylko podpisanych zakresów, z jednym znaczącym wyjątkiem: tinyint
w SQL Server jest niepodpisany i ma zakres wartości od 0 do 255
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-08 15:11:01
Wielkość wymaganego magazynu i jak duże mogą być liczby
On SQL Server
Tinyint 1 bajt, 0 do 255
Smallint 2 bajty, -2^15 (-32,768) do 2^15-1 (32,767)
Int 4 bajty, -2^31 (-2,147,483,648) do 2^31-1 (2,147,483,647)
Bigint 8 bajtów, -2^63 (-9,223,372,036,854,775,808) do 2^63-1 (9,223,372,036,854,775,807)
Możesz zapisać liczbę 1 we wszystkich 4, ale bigint będzie używał 8 bajtów, podczas gdy tinyint użyje 1 bajtu
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-07 19:30:24
To chyba typy danych MySQL.
Zgodnie z dokumentacją przyjmują:
- tinyint = 1 bajt
- smallint = 2 bajty
- mediumint = 3 bajty
- int = 4 bajty
- bigint = 8 bajtów
I oczywiście akceptują coraz większe zakresy liczb.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-07 16:51:01
Kiedy dojdzie do rzeczywistego użycia tych typów danych, bardzo ważne jest, abyś zrozumiał, że używanie pewnych typów całkowitych może być po prostu przesadą lub poniżej. Na przykład, użycie integer datatype dla employeeCount w tabeli say employee może być przesadą, ponieważ obsługuje zakres wartości całkowitych od ~ ujemnych 2 miliardów do dodatnich 2 miliardów lub od zera do około 4 miliardów (niepodpisanych). Tak więc, nawet jeśli wziąć pod uwagę jeden z największych pracodawców w USA, takich jak Walmart z mniej więcej około 2,2 miliona pracowników używających typu danych integer dla kolumny employeeCount byłoby niepotrzebne. W takim przypadku używasz mediumint (który obsługuje od 0 do 16 milionów (unsigned)) na przykład. Powiedziawszy, że jeśli oczekuje się, że twój zakres będzie niezwykle duży, możesz rozważyć bigint, który, jak widać z notatek Daniela, obsługuje zakres większy, niż zależy mi na rozszyfrowaniu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-28 16:23:17
Różnica polega na ilości pamięci przydzielonej do każdej liczby całkowitej oraz na tym, jak duża liczba może być przechowywana.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-07 16:45:55
Data type 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
Przykład
Poniższy przykład tworzy tabelę przy użyciu typów danych bigint, int, smallint i tinyint. Wartości są wstawiane do każdej kolumny i zwracane w instrukcji 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;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-06 05:45:56