× Aktuálně z oboru

Programátoři po celém světě dnes slaví Den programátorů [ clanek/2018091300-programatori-po-celem-svete-dnes-slavi-den-programatoru/ ]
Celá zprávička [ clanek/2018091300-programatori-po-celem-svete-dnes-slavi-den-programatoru/ ]

Přehled datových typů v MySQL

[ http://programujte.com/profil/5336-martin-simko/ ]Google [ https://plus.google.com/104110122892656564211?rel=author ]       [ http://programujte.com/profil/118-zdenek-lehocky/ ]Google [ ?rel=author ]       31. 7. 2007       104 703×

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.

Zdroj: http://dev.mysql.com, kniha MySQL Profesionálně

Článek stažen z webu Programujte.com [ http://programujte.com/clanek/2007052903-prehled-datovych-typu-v-mysql/ ].