Tags: MySQL

MySQL: jaka jest różnica między tinyint, smallint, mediumint, bigint i int?

W MySQL, różne typy danych całkowitych jak `TINYINT`, `SMALLINT`, `MEDIUMINT`, `INT` i `BIGINT` różnią się głównie zakresem wartości, które mogą przechowywać oraz ilością zajmowanej pamięci. Oto szczegółowe porównanie:

TINYINT

- Rozmiar: 1 bajt
- Zakres dla wartości nieoznaczonych (bez znaku): 0 do 255.
- Zakres dla wartości oznaczonych (ze znakiem): -128 do 127.
- Dobry do przechowywania bardzo małych danych liczbowych.

SMALLINT

- Zakres dla wartości nieoznaczonych: 0 do 65,535.
- Zakres dla wartości oznaczonych: -32,768 do 32,767.
- Używany, gdy dane liczbowe są większe niż `TINYINT`, ale wciąż stosunkowo małe.

MEDIUMINT

- Rozmiar: 3 bajty
- Zakres dla wartości nieoznaczonych: 0 do 16,777,215.
- Zakres dla wartości oznaczonych: -8,388,608 do 8,388,607.
- Dobry wybór, gdy `SMALLINT` jest za mały, a `INT` jest większy niż potrzeba.

INT

- Rozmiar: 4 bajty
- Zakres dla wartości nieoznaczonych: 0 do 4,294,967,295.
- Zakres dla wartości oznaczonych: -2,147,483,648 do 2,147,483,647.
- Jest to domyślny typ danych dla całkowitych wartości i jest używany w większości przypadków.

BIGINT

- Rozmiar: 8 bajtów
- Zakres dla wartości nieoznaczonych: 0 do 18,446,744,073,709,551,615.
- Zakres dla wartości oznaczonych: -9,223,372,036,854,775,808 do 9,223,372,036,854,775,807.
- Używany dla bardzo dużych wartości liczbowych, które przekraczają zakres dostępny dla `INT`.

Wybór typu danych zależy od zakresu danych, które przewidujesz przechowywać w kolumnie. Użycie mniejszego typu danych, który nadal spełnia wymagania zakresu, jest zalecane, ponieważ pomaga to oszczędzać miejsce w bazie danych, może poprawić wydajność i zmniejszyć zużycie pamięci.

Kolejną rzeczą, którą należy wziąć pod uwagę, jest opcja "UNSIGNED", którą można stosować do każdego z tych typów. Oznacza to, że kolumna nie będzie mogła przechowywać ujemnych wartości, podwajając zakres dla dodatnich wartości. Przykładowo, `INT UNSIGNED` może przechowywać wartości od 0 do 4,294,967,295, zamiast od -2,147,483,648 do 2,147,483,647.

Podsumowując, wybór między `TINYINT`, `SMALLINT`, `MEDIUMINT`, `INT` i `BIGINT` powinien być podyktowany wielkością zakresu danych, które zamierzasz przechowywać, i powinien być dostosowany tak, aby był jak najbardziej efektywny pod względem zajmowanej pamięci przy jednoczesnym zapewnieniu, że wszystkie przyszłe wartości zmieszczą się w tym zakresie.