SQL - dátové typy: Rozdiel medzi revíziami
(9 medziľahlých úprav od rovnakého používateľa nie je zobrazených.) | |||
Riadok 1: | Riadok 1: | ||
− | + | {{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, ...), | |
+ | *reálny (FLOAT, DOUBLE, ...), | ||
+ | *textový (VARCHAR, CHAR, TEXT, ...), | ||
+ | *binárny (BLOB, ...). | ||
− | + | 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. | |
− | |||
− | + | 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. | ||
− | {| class="wikitable" | + | ==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. | |
− | |||
− | | 4 | ||
|- | |- | ||
− | | | + | |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== | == 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 |