Co oznaczają cyfry przy typie INTEGER w bazie MySQL?

Treść dodana: 21 czerwca 2016.

Bardzo często początkujący użytkownicy bazy danych MySQL błędnie wyobrażają sobie deklarację liczb całkowitych (INTEGER). Uważają, że analogicznie do typu VARCHAR, definicja np. INT (5) oznacza maksymalny dopuszczalny zakres liczbowy dla zdefiniowanego pola. W tym przypadku miało by to być 0 – 99999. BŁĄD.

Należy sobie uświadomić iż MySQL zawsze przechowuje dane typu INTEGER w zakresach dopuszczalnych wartości. Zgodnie z dokumentacją jest to:

Typ danych Rozmiar Wartość minimalna Wartość maksymalna
(Bajt) (Signed/Unsigned) (Signed/Unsigned)
TINYINT 1 -128 127
0 255
SMALLINT 2 -32768 32767
0 65535
MEDIUMINT 3 -8388608 8388607
0 16777215
INT 4 -2147483648 2147483647
0 4294967295
BIGINT 8 -9223372036854775808 9223372036854775807
0 18446744073709551615

W polu SIGNED INTEGER możliwe będzie przechowanie liczb z zakresu -2147483648 – 2147483647, natomiast dla UNSIGNED INTEGER od 0 do 4294967295.

Co zatem oznaczają cyfry obok deklaracji typu?

Silnik MySQL umożliwia dodanie atrybutu ZEROFILL. Jego ustawienie jest równoznaczne z wymuszeniem typu UNSIGNED i powoduje dopełnienie poprzedzającymi zerami. Cyfry oznaczają zatem iloma zerami nasza liczba zostanie poprzedzona podczas wyświetlania tak, aby wyświetlonych zostało łącznie n-znaków. Sprawdźmy to na przykładzie.

CREATE TABLE `t1` (
	`id` INT NOT NULL AUTO_INCREMENT,
	`cyfry` INT(5) UNSIGNED ZEROFILL NOT NULL,
	PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

INSERT INTO t1(cyfry) VALUES (1234567),(123);
select * from t1;
+----+---------+
| id | cyfry   |
+----+---------+
|  1 | 1234567 |
|  2 |   00123 |
+----+---------+
2 rows in set (0.00 sec)

Widać że liczba o wyświetlanej długości większej niż 5 znaków została przedstawiona w swojej oryginalnej formie. Natomiast liczba `123` została dopełniona 2 zerami do łącznej długości 5 wyświetlanych znaków.

Warto też od razu zauważyć iż atrybut ZEROFILL jest pomijany w wyrażeniach albo zapytaniach UNION. Raczej odradzam jego używanie chyba że programista ma solidne podstawy i dobrze przemyślał architekturę aplikacji.

Komentarze

Nie ma jeszcze żadnych komentarzy do wyświetlenia. Może chcesz zostać pierwszą osobą która podzieli się swoją opinią?

Dodaj komentarz

*
Nazwa zostanie wyświetlona wraz z komentarzem. Możesz też utworzyć nowe konto w serwisie, dzięki czemu uzyskasz dodatkową funkcjonalność.
*
Akceptowana jest ograniczona składnia Textile. Wszystkie tagi HTML zostaną usunięte.