V tomto článku vám popíši všechny typy sloupců, které MySQL podporuje.
Určitě to znáte, zakládáte tabulku v MySQL a nevíte, jaký typ sloupce zvolit. Tento článek by vám měl situaci ulehčit přinejmenším v tom, že vám bude sloužit jako referenční příručka, do které můžete nahlédnout v případě, že si nejste jisti datovým typem pro sloupec. Článek je rozdělen podle systematických okruhů na:
- číselné typy
- řetězcové typy
- typy pro datum a čas
U specifikací datových typů budu používat tato označení:
- hranaté závorky „[ ]“ – jakákoli informace
- M – maximální zobrazovací šířka; když není uvedeno jinak, je to celé číslo od 1 do 255
- D – počet číslic za desetinnou čárkou (pokud datový typ desetinnou čárku podporuje); musí to být celé číslo od 0 do 30; D nesmí být větší než M − 2, jinak se M upraví na D + 2
- CC, YY, MM, DD – označení u časových a datových typů; označení znamenají: století, rok, měsíc, den
- hh, mm, ss – označení u časových a datových typů; označení znamenají: hodina, minuta, sekunda
Číselné typy
MySQL podporuje několik datových typů pro čísla. Umí pracovat jak s celými čísly, tak i čísly, která mají desetinnou čárku. Proto je dobré si při zakládání tabulky promyslet, jestli budeme do databáze ukládat pouze celá čísla nebo i čísla s desetinnou čárkou. Důležité je také mít na paměti to, že pokud použijeme u celočíselných datových typů atribut AUTO_INCREMENT [ http://dev.mysql.com/doc/refman/4.1/en/example-auto-increment.html ], musíme tomuto sloupci také přiřadit PRIMARY KEY nebo INDEX [ http://dev.mysql.com/doc/refman/4.1/en/constraint-primary-key.html ]. Zároveň také platí pravidlo, že když do sloupce s atributem AUTO_INCREMENT vkládáte hodnotu NULL [ http://dev.mysql.com/doc/refman/4.1/en/null-values.html ], tak je nahrazena následujícím číslem předcházejícího řádku (pokud je tedy v předcházejícím řádku číslo 55, následujícímu řádku bude přiřazeno číslo 56).
Pozn.: Číselné datové typy, které podporují atribut UNSIGNED, automaticky podporují i atribut SIGNED, ale atribut SIGNED je nastaven vždy jako standardní, nemá tedy žádný význam ho používat.
TINYINT [(M)]
Použití: velmi malá celá čísla
Atributy: AUTO_INCREMENT, UNSIGNED, SIGNED, ZEROFILL
Rozsah čísel: −128 až 127 nebo 0 až 255 pro UNSIGNED
Výchozí hodnota: NULL, pokud může být sloupec NULL; 0 je-li NOT NULL
Místo v paměti: 1 bajt
SMALLINT [(M)]
Použití: malá celá čísla
Atributy: AUTO_INCREMENT, UNSIGNED, SIGNED, ZEROFILL
Rozsah čísel: −32768 až 32767 nebo 0 až 65535 pro UNSIGNED
Výchozí hodnota: NULL, pokud může být sloupec NULL; 0 je-li NOT NULL
Místo v paměti: 2 bajty
MEDIUMINT [(M)]
Použití: středně velká celá čísla
Atributy: AUTO_INCREMENT, UNSIGNED, SIGNED, ZEROFILL
Rozsah čísel: −8388608 až 8388607 nebo 0 až 16777215 pro UNSIGNED
Výchozí hodnota: NULL, pokud může být sloupec NULL; 0 je-li NOT NULL
Místo v paměti: 3 bajty
INT [(M)]
Použití: běžně velká celá čísla
Atributy: AUTO_INCREMENT, UNSIGNED, SIGNED, ZEROFILL
Rozsah čísel: −2147483648 až 2147483647 nebo 0 až 4294967295 pro UNSIGNED
Výchozí hodnota: NULL, pokud může být sloupec NULL; 0 je-li NOT NULL
Místo v paměti: 4 bajty
BIGINT [(M)]
Použití: velká celá čísla
Atributy: AUTO_INCREMENT, UNSIGNED, SIGNED, ZEROFILL
Rozsah čísel: −9223372036854775808 až 9223372036854 nebo 0 až 18446744073709551615 pro UNSIGNED
Výchozí hodnota: NULL, pokud může být sloupec NULL; 0 je-li NOT NULL
Místo v paměti: 8 bajtů
FLOAT (p)
Použití: čísla v pohyblivé řádové čárce s bity přesnosti, které jsou minimálně požadované a určené hodnotou p. Pro hodnoty p od 0 do 24 je datový typ FLOAT ekvivalentní datovému typu float bez označení M nebo D. Pro hodnoty od 25 do 53 je tento datový typ ekvivalentní pro DOUBLE bez označení M nebo D.
Atributy: UNSIGNED, SIGNED a ZEROFILL
Rozsah čísel: viz dále v popisu FLOAT a DOUBLE
Výchozí hodnota: NULL, pokud může být sloupec NULL; 0 je-li NOT NULL
Místo v paměti: 4 bajty pro hodnoty 0 až 24 (= FLOAT), 8 bajtů pro hodnoty 24 až 53 (= DOUBLE)
FLOAT [(M,D)]
Použití: malá čísla v pohyblivé řádové čárce. Je-li D rovno 0, hodnoty sloupce nemají desetinnou čárku a ani desetinnou část. Pokud není M ani D uvedeno, není stanovena velikost zobrazení ani přesnost.
Atributy: UNSIGNED, SIGNED a ZEROFILL
Rozsah čísel: nejmenší nenulové hodnoty jsou ±1,175494351E−38; největší nenulové hodnoty jsou −±3,402823466E+38. Je-li sloupec UNSIGNED, jsou záporné hodnoty zakázané.
Výchozí hodnota: NULL, pokud může být sloupec NULL; 0 je-li NOT NULL
Místo v paměti: 4 bajty
Double [(M,D)]
Použití: velká čísla v pohyblivé řádové čárce; větší přesnost než u FLOAT. Je-li D rovno nule, hodnoty sloupce nemají desetinnou čárku a ani desetinnou část. Pokud není M ani D uvedeno, není stanovena velikost zobrazení ani přesnost.
Atributy: UNSIGNED, SIGNED a ZEROFILL
Rozsah čísel: nejmenší nenulové hodnoty jsou ±2,2250738585072014E-308; největší nenulové hodnoty jsou −±1,17976931348623157E+308. Je-li sloupec UNSIGNED, jsou záporné hodnoty zakázané.
Výchozí hodnota: NULL, pokud může být sloupec NULL; 0 je-li NOT NULL
Místo v paměti: 8 bajtů
Decimal [(M,D)]
Použití: velká čísla v pohyblivé řádové čárce ukládané jako řetězec (1 bajt na číslici, desetinnou čárku nebo znaménko „−“. Je-li D rovno nule, hodnoty sloupce nemají desetinnou čárku a ani desetinnou část. Pokud není M ani D uvedeno, jsou výchozí hodnoty 10 a 0.
Atributy: UNSIGNED, SIGNED a ZEROFILL
Rozsah čísel: rozsah čísel je stejný jako u DOUBLE; rozsah typu DECIMAL určují označení M a D
Výchozí hodnota: NULL, pokud může být sloupec NULL; 0 je-li NOT NULL
Místo v paměti: za normálních okolností M+2 bajtů (dva bajty navíc jsou pro znaky znaménka a desetinné čárky). Je-li sloupec UNSIGNED, velikost se zmenšuje o jeden bajt (nemusí se ukládat znaménko). Je-li D rovno nule, velikost se zmenšuje také o jeden bajt (nemusí se ukládat desetinná čárka).
Řetězcové typy
Tyto datové typy se v MySQL používají pro ukládání textu, avšak poradí si s jakýmikoli daty. V nouzi do nich proto můžete ukládat například i čísla. Jednotlivé datové typy mají přesně danou maximální délku a některé dokonce dokáží rozlišovat velikost písmen. Proto je důležité se už při tvorbě tabulky zamyslet nad tím, jaký typ pro řetězce budete potřebovat, aby nebyly později se změnou datového typu problémy.
CHAR [(M)]
Použití: řetězec pevně dané délky dlouhý 0 až M (M musí být celé číslo v rozmezí od 0 do 255). Není-li M uvedeno, je výchozí hodnota nastavena na 1. Pokud je řetězec ukládaný do databáze delší než M, tak se zkrátí na délku M a zbytek se „ztratí“. Je-li naopak ukládaný řetězec kratší než M, doplní se mezerami na délku M, ta je však při načítání dat z databáze ignorována, takže nemusíte mít obavy z mezer „navíc“.
Atributy: BINARY, CHARACTER SET
Povolená délka: 0 až M bajtů
Výchozí hodnota: NULL, pokud může být sloupec NULL; '' (= prázdný řetězec), pokud je NOT NULL
Místo v paměti: M bajtů
VARCHAR [(M)]
Použití: řetězec pevně dané délky dlouhý 0 až M (M musí být celé číslo v rozmezí od 0 do 255). Pokud je řetězec ukládaný do databáze delší než M, tak se zkrátí na délku M a zbytek se „ztratí“. Je-li naopak ukládaný řetězec kratší než M, koncové mezery se při ukládání odstraní.
Atributy: BINARY, CHARACTER SET
Povolená délka: 0 až M bajtů
Výchozí hodnota: NULL, pokud může být sloupec NULL; '' (= prázdný řetězec), pokud je NOT NULL
Porovnávání: není-li uveden atribut BINARY, nerozlišuje velikost písmen
Místo v paměti: délka hodnoty plus 1 bajt pro zaznamenání délky
TINYBLOB
Použití: malá hodnota BLOB
Atributy: jen globální atributy
Povolená délka: 0 až 255 bajtů
Výchozí hodnota: NULL, pokud může být sloupec NULL; '' (= prázdný řetězec), pokud je NOT NULL
Porovnávání: rozlišuje velikost písmen
Místo v paměti: délka hodnoty plus 1 bajt pro zaznamenání délky
BLOB
Použití: normální hodnota BLOB
Atributy: jen globální atributy
Povolená délka: 0 až 65535 bajtů
Výchozí hodnota: NULL, pokud může být sloupec NULL; '' (= prázdný řetězec), pokud je NOT NULL
Porovnávání: rozlišuje velikost písmen
Místo v paměti: délka hodnoty plus 2 bajty pro zaznamenání délky
MEDIUMBLOB
Použití: středně velká hodnota BLOB
Atributy: jen globání atributy
Povolená délka: 0 až 16777215 bajtů
Výchozí hodnota: NULL, pokud může být sloupec NULL; '' (= prázdný řetězec), pokud je NOT NULL
Porovnávání: rozlišuje velikost písmen
Místo v paměti: délka hodnoty plus 3 bajty pro zaznamenání délky
LONGBLOB
Použití: velká hodnota BLOB
Atributy: jen globání atributy
Povolená délka: 0 až 4294967295 bajtů
Výchozí hodnota: NULL, pokud může být sloupec NULL; '' (= prázdný řetězec), pokud je NOT NULL
Porovnávání: rozlišuje velikost písmen
Místo v paměti: délka hodnoty plus 4 bajty pro zaznamenání délky
TINYTEXT
Použití: malá hodnota TEXT
Atributy: CHARACTER SET
Povolená délka: 0 až 255 bajtů
Výchozí hodnota: NULL, pokud může být sloupec NULL; '' (= prázdný řetězec), pokud je NOT NULL
Porovnávání: nerozlišuje velikost písmen
Místo v paměti: délka hodnoty plus 1 bajt pro zaznamenání délky
TEXT
Použití: normální hodnota TEXT
Atributy: CHARACTER SET
Povolená délka: 0 až 65535 bajtů
Výchozí hodnota: NULL, pokud může být sloupec NULL; '' (= prázdný řetězec), pokud je NOT NULL
Porovnávání: nerozlišuje velikost písmen
Místo v paměti: délka hodnoty plus 2 bajty pro zaznamenání délky
MEDIUMTEXT
Použití: středně velká hodnota TEXT
Atributy: CHARACTER SET
Povolená délka: 0 až 16777215 bajtů
Výchozí hodnota: NULL, pokud může být sloupec NULL; '' (= prázdný řetězec), pokud je NOT NULL
Porovnávání: nerozlišuje velikost písmen
Místo v paměti: délka hodnoty plus 3 bajty pro zaznamenání délky
LONGTEXT
Použití: velká hodnota TEXT
Atributy: CHARACTER SET
Povolená délka: 0 až 4294967295 bajtů
Výchozí hodnota: NULL, pokud může být sloupec NULL; '' (= prázdný řetězec), pokud je NOT NULL
Porovnávání: nerozlišuje velikost písmen
Místo v paměti: délka hodnoty plus 4 bajty pro zaznamenání délky
ENUM ('hodnota1', 'hodnota2',…)
Použití: výčet hodnot; hodnoty ze sloupce mohou mít přiřazeny právě jednu hodnotu ze seznamu hodnot
Atributy: jen globální atributy
Výchozí hodnota: NULL, pokud může být sloupec NULL; první hodnota výčtu, pokud je NOT NULL
Porovnávání: nerozlišuje velikost písmen
Místo v paměti: 1 bajt pro výčty s členy 1 až 255; 2 bajty pro výčty s členy 256 až 65535
SET ('hodnota1', 'hodnota2',…)
Použití: množina; hodnotám ze sloupců lze přiřadit nula nebo více členů ze seznamu hodnot
Atributy: jen globální atributy
Výchozí hodnota: NULL, pokud může být sloupec NULL; '' (= prázdná množina), pokud je NOT NULL
Porovnávání: nerozlišuje velikost písmen
Místo v paměti: 1 bajt pro množiny s 1 až 8 členy; 2 bajty pro množiny s 9 až 16 členy; 3 bajty pro množiny s 17 až 24 členy; 4 bajty pro množiny s 25 až 32 členy; 8 bajtů pro množiny s 33 až 64 členy
Typy pro datum a čas
V MySQL můžeme využít několik datových typů pro datum a čas. V některých je datum a čas dohromady, v jiných zase je datum a čas zvlášť. Existuje i speciální typ časové značky, který si do databáze vždy ukládá aktuální datum a čas kdy byl daný řádek aktualizován. (Často se toho využívá na fórech u editací příspěvku). K dispozici je také datový typ, který zaznamenává pouze roky.
DATE
Použití: datum ve formátu 'CCYY-MM-DD'
Atributy: jen globální atributy
Rozsah: '1000-01-01' až '9999-12-31'
Nulová hodnota: '0000-00-00'
Výchozí hodnota: NULL, pokud může být sloupec NULL; '0000-00-00', je-li NOT NULL
Místo v paměti: 3 bajty
TIME
Použití: čas ve formátu 'hh:mm:ss'; pro záporné hodnoty '-hh:mm:ss'; reprezentuje uplynulý čas, nebo se dá chápat jako čas dne
Atributy: jen globální atributy
Rozsah: '-838:59.59' až '838:59:59'
Nulová hodnota: '00:00:00'
Výchozí hodnota: NULL, pokud může být sloupec NULL; '00:00:00', je-li NOT NULL
Místo v paměti: 3 bajty
DATETIME
Použití: datum a čas ve formátu 'CCYY-MM-DD hh:mm:ss'
Atributy: jen globální atributy
Rozsah: '1000-01-01 00:00:00' až '999-12-31 23:59:59'
Nulová hodnota: '000-00-00 00:00:00'
Výchozí hodnota: NULL, pokud může být sloupec NULL; '0000-00-00 00:00:00', je-li NOT NULL
Místo v paměti: 8 bajtů
TIMESTAMP [(M)]
Použití: časová značka ve formátu 'CCYY-MM-DD hh:mm:ss' (obsahuje datum i čas). Vložíte-li do sloupce, kde je nastaven TIMESTAMP, NULL, do databáze se uloží aktuální datum a čas ve formátu popsaném výše. Upravujete-li jakýkoli sloupec v řádku, kde je nastaven také TIMESTAMP, upraví se i sloupec TIMESTAMP, a to na aktuální datum a čas, kdy byla změna provedena.
Atributy: jen globální atributy
Rozsah: 19700101000000 až někdy do roku 2037
Nulová hodnota: 00000000000000
Výchozí hodnota: aktuální datum a čas pro první sloupec TIMESTAMP tabulky, 0 pro ostatní sloupce
Místo v paměti: 4 bajty
Poznámka: příkaz DESCRIBE a SHOW COLUMNS vrací NULL, i když prakticky nelze NULL do tohoto typu sloupce uložit, nastavíte-li však sloupec jako NULL, uloží se do sloupce TIMESTAMP aktuální datum a čas; pokud je nastaven atribut NOT NULL, ignoruje se
YEAR[(M)]
Použití: hodnota roku. Je-li uvedeno M, musí být pro formáty YY nebo CCYY hodnoty 2 respektive 4. Není-li M uvedeno, výchozí hodnota je 4.
Atributy: jen globální atributy
Rozsah: 1901 až 2155 a 0000 pro formát YEAR(4); 1970 až 2069 pro formát YEAR(2), zobrazí se pouze poslední dvě číslice
Nulová hodnota: 0000 pro YEAR(4), 00 pro YEAR(2)
Výchozí hodnota: NULL, pokud může být sloupec NULL; 0000 (respektive 00), je-li NOT NULL
Místo v paměti: 1 bajt
Závěr
Tímto výčet datových typů v MySQL končí. Účelem tohoto článku není to, abyste se všechny tyto typy naučili nazpaměť, jde jen o to, abyste věděli, že MySQL není jenom o VARCHAR, INT a TIMESTAMP.