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.
Dodaj komentarz
- sieć
- http
- apache
- ssl
- php
- composer
- javascript
- jquery
- ajax
- html
- pdo
- sql server
- spl
- css
- sql
- mysql
- postresql
- mongodb
- psr
- programowanie
- regex
Wyszukaj interesujące Cię słowa kluczowe pośród istniejących porad.
Komentarze
Nie ma jeszcze żadnych komentarzy do wyświetlenia. Może chcesz zostać pierwszą osobą która podzieli się swoją opinią?