Typy danych w MySQL 8 : liczby całkowite

Jedną z kategorii typów danych w MySQL 8 są liczby całkowite. W zależności od wielkości liczby, jaką chcemy przedstawić, możemy zastosować typ, który zajmie jak najmniej miejsca w bazie danych. Na powyższym screenie możemy zaobserwować różnice między poszczególnymi typami danych dla liczby całkowitych.

Oto lista tych typów danych wraz z liczbą bajtów jakie zajmują:

  • TINYINT – 1bajt,
  • SMALLINT – 2 bajty,
  • MEDIUMINT 3 bajty,
  • INT – 4 bajty, synonimem jest INTEGER,
  • BIGINT – 8 bajty.

Każdy z typów danych dla liczb całkowitych może mieć dodatkowo dodany atrybut UNSIGNED, domyślnym atrybutem jest SIGNED, którego nie musimy podawać. Atrybut UNSIGNED informuje, że w kolumnie o danym typie danych można przechowywać tylko liczby całkowite nieujemne, dzięki czemu ich zakres jest większy jeśli chodzi o wielkość liczb. Bez tego atrybut przedział jest od liczb ujemnych do dodatnich, ale z kolei największa liczba dodatnia jest mniejsza. Możemy to zauważyć na przykładzie typu danych TINYINT. Dla tego typu domyślnie kolumna może przechowywać wartości od -128 do 127, bo maksymalnie liczba może zająć tylko 1 bajt, a 1 bajt to dwa (bo bit 0 lub 1) do potęgi osiem (1 bajt składa się z 8 bitów) co daje 256 możliwych liczb. Największa jest 127. Ale z atrybutem UNSIGNED jest to zakres od 0 do 255. Wszystko zależy więc od tego, czy będziemy wstawiać liczby ujemne, czy nie. Podobnie wygląda to dla pozostałych typów danych liczb całkowitych.

Przejdźmy zatem do przykładów w konsoli MySQL. Ustawmy jakąś dowolną bazę bieżącą, u mnie jest to test ( USE test; ):

Tworzymy w bazie danych tabelę o nazwie t:

CREATE TABLE t (col tinyint );

Wstawmy teraz do tabeli liczbę -100 oraz liczbę 0 i liczbę 120:

INSERT INTO t VALUES(-100);
INSERT INTO t VALUES(0);
INSERT INTO t VALUES(120);

Jak widać zarówno ujemna, jak i dodatnia liczba zostały wstawione. A teraz spróbujmy coś spoza zakresu tego typu danych np. liczbę 130 :

INSERT INTO t VALUES( 130 );

Tym razem ta wartość nie została wstawiona, bo zakres kończy się na liczbie 128 .

Usuńmy zatem tą tabelę i utwórzmy nową z tym samym typem danych ale z atrybutem UNSIGNED ;

DROP TABLE t;

CREATE TABLE t (col tinyint UNSIGNED );

A teraz spróbujmy wstawić liczbę 130 do tabeli z atrybutem UNSIGNED :

INSERT INTO t VALUES(130);

Tym razem wiersz został wstawiony. A co z liczbą ujemną np. -10 :

INSERT INTO t VALUES( -10 );

Niestety, tabela nie pozwoliła na wstawienie liczby ujemnej dla kolumny z atrybutem UNSIGNED, liczba ujemna jest poza zakresem dopuszczalnych wartości dla tej kolumny.

Co ciekawe do kolumny typu całkowitoliczbowego możemy wstawić tak jak do kolumny typu BIT , wartości boolean : false , true .

Po przekazaniu do kolumny wartości false , pojawi się zero, a po wstawieniu wartości true liczba 1.

Pozostałe typy danych liczb całkowitych działają tak samo, różnica polega jedynie na większym zakresie dopuszczalnych wartości.

Dla typu danych BIGINT ( dużych liczb całkowitych), który  chcemy ustawić na kolumnie jako wartości unikalne nieujemne z zakazem wstawiania NULL automatycznie generowane , możemy użyć aliasu SERIAL. Często jest  używany dla klucza głównego dla tabel o przewidywanej  dużej liczby wierszy, który nie powinien przyjmować NULL, być unikalny:

SERIAL to to samo co BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE