SQL - dátové typy
Pri vytváraní databázových tabuliek musíme definovať domény atribútov relácie, čiže dátové typy pre atribúty tabuľky. V databázových systémoch rozlišujeme základné dátové typy[1][2]:
- celočíselný (INT, ...),
- reálny (FLOAT, DOUBLE, ...),
- textový (VARCHAR, CHAR, TEXT, ...),
- binárny (BLOB, ...).
Každý databázový server implementuje tieto základné dátové typy.
Medzi špeciálne dátové typy, resp. hodnoty patrí NULL.
- NULL
- nie je nula, ani medzera. NULL je špeciálna hodnota - nepriradená, prázdna, resp. žiadna. Ak sa NULL nachádza v aritmetickom výraze, výsledok je vždy NULL.
Databázový server MySQL podporuje celý rad dátových typov v niekoľkých kategóriách: číselné typy, typy pre dátum a čas, reťazcové (znakové) typy. V tejto časti sa nachádza opis týchto dátových typov.
Pri opise dátových typov používame nasledujúce konvencie:
- Veľkosť udáva maximálnu šírku pre celočíselné typy. Pre čísla s desatinnou časťou je Veľkosť celkový počet číslic, ktoré môžu byť uložené. Pre reťazcové typy je Veľkosť maximálna dĺžka reťazca. Maximálne prípustné hodnoty Veľkosť závisia od typu dát.
- d sa vzťahuje len k čislam s desatinnou časťou a označuje počet číslic za desatinnou čiarkou. Maximálna možná hodnota je 30, ale mala by byť väčšia ako Veľkosť-2.
- Hranaté zátvorky '[' a ']' hovoria o nepovinných častiach v definíciách dátových typov.
Textové typy
Textové dátové typy[3] sú CHAR, VARCHAR, BINARY, VARBINARY, BLOB, TEXT, ENUM, a SET. V nasledujúcej tabuľke sú tieto typy opísané podrobnejšie. Pri deklarácii textového typu je možnosť definovať maximálnu veľkosť daného typu a tým optimalizovať databázový návrh z hľadiska využia miesta.
Dátový typ | Opis |
---|---|
CHAR(veľkosť) | Používa sa na uloženie reťazca pevnej dĺžky. Pevná dĺžka je definovaná v zátvorke - veľkosť. Maximálny počet znakov je 255. |
VARCHAR(veľkosť) | Používa sa na uloženie reťazca premenlivej dĺžky. Táto dĺžka je definovaná v zátvorke - veľkosť. Maximálny počet znakov je 255. Pri uvedení väčšej hodnoty ako 255 sa automaticky zmení na dátový typ TEXT. |
TINYTEXT | Reťazec s maximálnou dĺžkou 255 znakov. |
TEXT | Reťazec s maximálnou dĺžkou 65535 znakov. |
BLOB | Veľký binárny objekt (BLOB - Binary Large OBjects). Umožňuje uloženie do 65535 bajtov binárnych dát. |
MEDIUMTEXT | Reťazec s maximálnou dĺžkou 16 777 215 znakov. |
MEDIUMBLOB | Veľký binárny obejkt (BLOB - Binary Large OBjects). Umožňuje uloženie do 16 777 215 (16MB) bajtov binárnych dát. |
LONGTEXT | Dátový typ pre uloženie až 4,294,967,295 znakov. |
LONGBLOB | Veľký binárny obejkt (BLOB - Binary Large OBjects). Umožňuje uloženie do 4 294 967 295 bajtov (4GB) binárnych dát. |
ENUM(x,y,z,atď.) | Vymenovaný typ. Je potrebné určiť zoznam povolených hodnôt. Počet týchto hodnôt môže byť maximálne 65535. Ak sa pokúsime vložiť do tabuľky hodnotu, ktorú sme nedefinovali, vloží sa prázdna hodnota NULL. |
SET | Množina. Podobné dátovému typu ENUM s tým rozdielom, že môžeme zadefinovať maximálne 64 položiek a v tabuľke môžeme uložiť viac ako jednu položku. |
Číselné typy
MySQL podporuje všetky štandardné SQL číselné dátové typy[4]. Tieto typy zahŕňajú celočíselné dátové typy (INTEGER, SMALLINT, DECIMAL a NUMERIC), ako číselné dátové typy s desatinnou časťou (FLOAT, REAL, DOUBLE PRECISION). Kľúčové slovo INT je synonymom pre INTEGER, a kľúčové slová DEC a FIXED sú synonymá pre DECIMAL. MySQL používa dátový typ DOUBLE ako synonymum pre DOUBLE PRECISSION (neštandardné rozšírenie).
Dátový typ | Opis |
---|---|
TINYINT | Celé číslo v intervale od -128 do 127. Pri doplnení špecifikátora UNSIGNED je rozsah od 0 do 255. |
SMALLINT | Celé číslo v intervale od -32768 do 32767. Pri doplnení špecifikátora UNSIGNED je rozsah od 0 do 65535. |
MEDIUMINT | Celé číslo v intervale od -8388608 do 8388607. Pri doplnení špecifikátora UNSIGNED je rozsah od 0 do 16777215. |
INT | Celé číslo v intervale od -2147483648 do 2147483647. Pri doplnení špecifikátora UNSIGNED je rozsah od 0 do 4294967295. |
BIGINT | Celé číslo v intervale od -9223372036854775808 do 9223372036854775807. Pri doplnení špecifikátora UNSIGNED je rozsah od 0 do 18446744073709551615. |
FLOAT(Veľkosť,d) | Číslo s desatinnou časťou. Maximálny počet cifier, pre zobrazenie čísla udáva parameter Veľkosť. Maximálny počet číslic vpravo od desatinnej čiarky je uvedené v parametri d. Rozsah typu FLOAT: od -3.402E+38 do -1.1751E-38, od 1.175E-38 do 3.402E+38. |
DOUBLE(Veľkosť,d) | Číslo s desatinnou časťou - s dvojitou presnosťou. Maximálny počet cifier, pre zobrazenie čísla udáva parameter Veľkosť. Maximálny počet číslic vpravo od desatinnej čiarky je uvedené v parametri d. Rozsah typu DOUBLE: od 1.7976E+308 do -2.225E-308; 0; od 2.225E-308 do 1.797E+308. |
DECIMAL(Veľkosť,d) | Hodnota DOUBLE uložená ako reťazec. Význam parametrov Veľkosť a d je rovnaký ako v predchádzajúcich príkladoch. |
Dátumové typy
Dátové typy pre dátum[5] sú DATETIME, DATE, TIMESTAMP, TIME a YEAR. Každý typ má množinu hodnôt, ktoré môže nadobúdať. Dátový typ TIMESTAMP je zvláštny dátový typ, ktorého hodnota sa vypočíta pri vkladaní sama.
Dátový typ | Opis | Rozsah |
---|---|---|
DATE() | Dátum. Formát je nasledujúci: YYYY-MM-DD. | od 1000-01-01 do 9999-12-31 |
DATETIME() | Kombinácia dátumu a času. Formát je nasledujúci: YYYY-MM-DD HH:MM:SS. | od 1000-01-01 00:00:00 do 9999-12-31 23:59:59 |
TIMESTAMP() | Časové razítko. Hodnota dátového typu TIMESTAMP je počet sekúnd od začiatku Unixovej epochy, teda od 1970-01-01 00:00:00 UTC. Format pre dátový typ TIMESTAMP je: YYYY-MM-DD HH:MM:SS. | od 1970-01-01 00:00:01 UTC do 2038-01-09 03:14:07 UTC |
TIME() | Čas. Formát pre typ TIME je: HH:MM:SS. | od -838:59:59 do 838:59:59 |
YEAR[(2|4)] | YEAR je dvoj /YEAR(2)/ alebo štvor /YEAR(4)/ ciferná reprezentácia roku. | pre 4-ciferný formát: od 1901 do 2155
pre 2-ciferný formát: do 70 do 69, čo reprezentuje roky od 1970 do 2069 |