W MySQL istnieje wiele typów kolumn (pól), ale wszystkie dają się zaklasyfikować do 3 kategorii: numeryczne, daty i czasu
lub znakowe. Przegląd wszystkich typów kolumn przedstawia poniższa tabela.
Efektywne wykorzystanie przestrzeni dyskowej bazy oraz optymalne wykorzystanie możliwości i szybkości działania MySQL wymaga
przemyślanego doboru typu pól do przechowywanych w nich wartości. Dlatego projektując kolejne tabele należy dokładnie
przemyśleć i starannie dobierać typy jej pól.
Oznaczenia w tabeli:
M | maksymalna wyświetlana długość pola (<= 255) |
D | ilość miejsc po kropce dziesiętnej w liczbach rzeczywistych ( M-2 <= D <= 30) |
[ ] | użycie atrybutu jest opcjonalne |
Uwagi:
- Użycie atrybutu ZEROFILL powoduje automatyczne dodanie atrybutu UNSIGNED do tej kolumny.
- Ustawienie atrybutu UNSIGNED powoduje, że wynik odejmowania z użyciem tej kolumny będzie zawsze dodatni.
|
Typy numeryczne
Typ |
Zakres wartości |
Opis |
bez UNSIGNED |
z UNSIGNED |
TINYINT[(M)] [UNSIGNED] [ZEROFILL] |
-128 do 127 |
0 do 255 |
liczba całkowita |
BIT BOOL |
-- |
-- |
synonim dla TINYINT(1) |
SMALLINT[(M)] [UNSIGNED] [ZEROFILL] |
-32768 do 32767 |
0 do 65535 |
liczba całkowita |
MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] |
-8388608 do 8388607 |
0 do 16777215 |
liczba całkowita |
INT[(M)] [UNSIGNED] [ZEROFILL] INTEGER[(M)] [UNSIGNED] [ZEROFILL] |
-2147483648 do 2147483647 |
0 do 4294967295 |
liczba całkowita |
BIGINT[(M)] [UNSIGNED] [ZEROFILL] |
-9223372036854775808 do 9223372036854775807 |
0 do 18 446 744 073 709 551 615 |
liczba całkowita |
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] |
-3.402823466E+38 do -1.175494351E-38
0
1.175494351E-38 do 3.402823466E+38 |
j.w., ale bez liczb ujemnych |
liczba rzeczywista |
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] REAL[(M,D)] [UNSIGNED] [ZEROFILL] |
-1.7976931348623E+308 do -2.2250738585072E-308
0
2.2250738585072E-308 do 1.7976931348623E+308 |
j.w., ale bez liczb ujemnych |
liczba rzeczywista |
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL] DEC[(M[,D])] [UNSIGNED] [ZEROFILL] NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL] |
jak DOUBLE |
jak DOUBLE |
liczba rzeczywista zapisana jako łańcuch znaków (CHAR). Domyślna wartość D = 0. Domyślna wartość M = 10. |
Typy daty i czasu
Typ |
Opis |
DATE |
Data, z dopuszczalnym zakresem od '1000-01-01' do '9999-12-31'.
Data wyświetlana jest w formacie 'YYYY-MM-DD', ale może być wstawiana jako wartość znakowa lub numeryczna.
Błędne wartości zastępowane są wartością: '0000-00-00' |
DATETIME |
Połączona data i czas z dopuszczalnym zakresem od '1000-01-01 00:00:00' do '9999-12-31 23:59:59'.
Wyświetlana w formacie: 'YYYY-MM-DD HH:MM:SS', ale może być wstawiana jako wartość znakowa lub numeryczna.
Błędne wartości zastępowane są wartością: '0000-00-00 00:00:00' |
TIMESTAMP[(M)] |
Data i czas, z wartościami od '1970-01-01 00:00:00' do '2037-12-31 23:59:59'.
Wyświetlana w formacie YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD lub YYMMDD zależnie od wartości M: 14 (lub brak), 12, 8 lub 6.
Może być użyta jako wartość numeryczna lub znakowa.
Jeżeli w instrukcjach INSERT i UPDATE pominiemy wartość dla kolumny tego typu lub podamy wartość NULL,
to zostanie w nie automatycznie wstawiona data i czas bieżące.
Błędne wartości zastępowane są wartością: '00000000000000' |
TIME |
Czas z zakresu od '-838:59:59' do '838:59:59'.
Wyświetlany w formacie 'HH:MM:SS', ale może być wstawiana jako wartość znakowa lub numeryczna.
Błędne wartości zastępowane są wartością: '00:00:00' |
YEAR[(2|4)] |
Rok jako liczba 2- lub 4-cyfrowa (domyślnie 4-syfrowa).
Dla 4-cyfrowej zakres wynosi od 1901 do 2155, a dla 2-cyfrowej od 1970 do 2069 (70-69). Wyświetlany jest zawsze w formacie YYYY.
Błędne wartości zastępowane są wartością: '0000' |
Typy znakowe
Typ |
Opis |
[NATIONAL] CHAR(M) [BINARY] |
Pole znakowe stałej długości uzupełniane z prawej strony spacjami.
0 <= M <= 255.
Wartości typu CHAR są porównywane bez rozróżniania wielkości liter poza przypadkiem, kiedy podano atrybut BINARY.
|
CHAR |
Synonim dla CHAR(1). |
[NATIONAL] VARCHAR(M) [BINARY] |
Analogicznie do CHAR(M). Jedyna różnica polega na tym, że pole jest zmiennej długości (obcinane są końcowe spacje). |
TINYBLOB TINYTEXT |
Pole znakowe o długości do 255 (2^8 - 1) znaków. |
BLOB TEXT |
Pole znakowe o długości do 65535 (2^16 - 1) znaków. |
MEDIUMBLOB MEDIUMTEXT |
Pole znakowe o długości do 16777215 (2^24 - 1) znaków. |
LONGBLOB LONGTEXT |
Pole znakowe o długości do 4294967295 (2^32 - 1) znaków. |
ENUM('wartość1','wartość2',...) |
Typ wyliczeniowy.
Pole może przyjąć tylko jedną z wartości umieszczonych na liście, wartość NULL lub "".
Maksymalna ilość elementów listy: 65535.
Przykład:
kolumna zadeklarowana jako ENUM("aaa", "bbb", "ccc") może przyjąć jedną z wartości: NULL, "", "aaa", "bbb", "ccc". |
SET('wartość1','wartość2',...) |
Typ wyliczeniowy.
Pole może przyjąć 0 lub więcej wartości z listy.
Maksymalna ilość elementów listy: 64.
Wartości zapamiętywane są poprzez ustawienie odpowiednich bitów 8-bajtowej liczby.
Przykład:
deklarujemy pola jako SET("a","b","c","d")
- przypisanie wartości "a" będzie zapisane jako "00001"
- przypisanie wartości "e" będzie zapisane jako "10000"
- przypisanie wartości "a,e" będzie zapisane jako "10001" |
Typy CHAR i VARCHAR są podobne, ale różnią się sposobem przechowywania i wyświetlania oraz ilością zajmowanego miejsca.
Pokazuje to poniższy przykład:
Wartość |
Typ CHAR(4) |
Ilość bajtów |
Typ VARCHAR(4) |
Ilość bajtów |
'' |
' ' |
4 bajty |
'' |
1 bajt |
'ab' |
'ab ' |
4 bajty |
'ab' |
3 bajty |
'abcd' |
'abcd' |
4 bajty |
'abcd' |
5 bajtów |
'abcdefgh' |
'abcd' |
4 bajty |
'abcd' |
5 bajtów |