SQL - dátové typy: Rozdiel medzi revíziami
(Vytvorená stránka „{{Draft}} {{Skripta_dbs}} 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…“) |
|||
(10 medziľahlých úprav od rovnakého používateľa nie je zobrazených.) | |||
Riadok 1: | Riadok 1: | ||
− | |||
{{Skripta_dbs}} | {{Skripta_dbs}} | ||
+ | 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<ref>http://www.w3schools.com/SQL/sql_datatypes.asp</ref><ref>http://dev.mysql.com/doc/refman/5.5/en/data-types.html</ref>: | ||
− | + | *celočíselný (INT, ...), | |
− | *celočíselný (INT, ...) | + | *reálny (FLOAT, DOUBLE, ...), |
− | *reálny (FLOAT, DOUBLE, ...) | + | *textový (VARCHAR, CHAR, TEXT, ...), |
− | *textový (VARCHAR, CHAR, TEXT, ...) | + | *binárny (BLOB, ...). |
− | *binárny (BLOB, ...) | ||
− | Každý databázový server implementuje tieto dátové typy | + | Každý databázový server implementuje tieto základné dátové typy. |
+ | __TOC__ | ||
+ | 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. | |
− | |||
− | |||
− | |||
− | http:// | + | 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 '<nowiki>[</nowiki>' a '<nowiki>]</nowiki>' hovoria o nepovinných častiach v definíciách dátových typov. | ||
+ | |||
+ | ==Textové typy== | ||
+ | Textové dátové typy<ref>http://dev.mysql.com/doc/refman/5.5/en/string-types.html</ref> 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. | ||
+ | {|class="wikitable" | ||
+ | |+ Textové dátové typy v MySQL | ||
+ | !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<ref>http://dev.mysql.com/doc/refman/5.5/en/numeric-types.html</ref>. 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). | ||
+ | |||
+ | {|class="wikitable" | ||
+ | |+ Číselné dátové typy v MySQL | ||
+ | !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<ref>http://dev.mysql.com/doc/refman/5.5/en/date-and-time-types.html</ref> 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. | ||
+ | {|class="wikitable" | ||
+ | |+ Dátumové dátové typy v MySQL | ||
+ | !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 | ||
+ | |- | ||
+ | |<nowiki>YEAR[(2|4)]</nowiki> | ||
+ | |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 | ||
+ | |} | ||
+ | |||
+ | == Zdroje a odkazy== | ||
+ | <references/> |
Aktuálna revízia z 19:20, 17. január 2011
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 |