

31. 07. 2007 | 18:07 - Martin Šimko (Mautinek) - 25031× přečtenoUrč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:
U specifikací datových typů budu používat tato označení:
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
, musíme tomuto sloupci také přiřadit PRIMARY KEY nebo INDEX
. Zároveň také platí pravidlo, že když do sloupce s atributem AUTO_INCREMENT vkládáte hodnotu NULL
, 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).
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
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
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
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
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ů
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)
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
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ů
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).
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.
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ů
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
Použití: malá hodnota
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
Použití: normální hodnota
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
Použití: středně velká hodnota
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
Použití: velká hodnota
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
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
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
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
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
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
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
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.
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
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
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ů
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
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
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.
| Bez titulku | ConnectiCut | 31. 07. 2007 | 23:02 |
| Proč článek? | mark | 01. 08. 2007 | 12:16 |
| Chybny timestamp | uzivatel | 04. 08. 2007 | 16:45 |
| Překlep v max. hodnotě unsigned int | J.N. | 25. 01. 2008 | 23:30 |