Začínáme s MySQL 5. – úvod do datových typů

V minulém díle jsem vám ve stručnosti sdělil základní informace o návrhu a tvorbě databáze v MySQL. Dříve než tuto databázi budete moci zaplnit daty (tabulkami), ale musíte vědět něco o jednotlivých datových typech.

Každá nově vytvořená tabulka v databázi má nadefinovaný počet polí (sloupců) s tím, že každé pole má svůj datový typ. Dalo by se říct, že datový typ je vlastně atribut pole, který určuje, jaký typ dat se do daného pole smí uložit. Žádné pole přitom není povinně vyžadováno – záleží tedy na vašich požadavcích.

Číselné datové typy

Tato skupina datových typů umožňuje ukládat pouze čísla, tj. nepodaří se vám do polí těchto typů vložit text. Číselných datových typů je hned několik. Každý z nich přitom slouží k ukládání jiných čísel. Čísla totiž mohou být celá, desetinná, může se jednat o zlomky... apod. Výčet dostupných typů je uveden v následující tabulce:

Název datového typu Interval Zabíraná paměť
TINYINT - 128 až 127 1 bajt
SMALLINT - 32768 až 32767 2 bajty
MEDIUMINT - 8388608 až 8388607 3 bajty
INT - 2147483648 až 2147483647 4 bajty
INTEGER - 2147483648 až 2147483647 4 bajty
BIGINT - 9223372036854775808 až

9223372036854775807

8 bajtů
FLOAT (M, D) Dle použitých hodnot 4 bajty
DOUBLE (M, D) Dle použitých hodnot 8 bajtů
REAL (M, D) Dle použitých hodnot 8 bajtů
DECIMAL (M, D) Dle použitých hodnot Dle hodnoty M + 2
NUMERIC (M, D) Dle použitých hodnot Dle hodnoty M + 2

(Poznámka: Dvojice datových typů INT-INTEGER, DOUBLE-REAL a DECIMAL-NUMERIC jsou vlastnostmi totožné. Jedná se tedy o synonyma.)

Nyní krátce vysvětlím význam a použití těchto typů. Číselné typy TINYINT, SMALLINT, MEDIUMINT, INT (INTEGER) a BIGINT slouží u ukládání celých čísel. Do těchto typů neuložíte desetinné číslo – to by bylo automaticky odříznuto. V používání těchto typů však buďte předvídaví. Je nesmysl některému poli přiřazovat typ BIGINT, když víme, že se do něj budou ukládat hodnoty pouze v rozmezí např. 0 - 20. To by bylo dost nehospodárné a zbytečně by to zpomalovalo vykonávání SQL příkazů. Pro toto rozmezí by totiž bohatě postačil typ TINYINT, který je podstatně úspornější.

Zbývající číselné typy slouží k ukládání zlomků či desetinných čísel. Ve většině případů si vystačíte s typem FLOAT. Parametr M značí maximální délku čísla a parametr D říká, kolik může být maximální délka čísla za zlomkovou čarou. Pokud tedy máme nastaveny parametry datového typu FLOAT na (4,2), pak dané číslo smí mít maximální délku 4 a počet číslic za zlomkovou čarou nesmí přesáhnout 2. Kdybychom do takto nadefinovaného datového typu chtěli například uložit číslo 2,454, ve skutečnosti se nám uloží pouze 2,45 , protože MySQL zaokrouhlí číslo na požadovaný počet číslic za zlomkovou čarou.

(Poznámka: Za parametr M můžete maximálně dosadit hodnotu 255 a u parametru D 30, ale neměli byste zadávat více jak 28.)

(Doporučení: Pokud budete ukládat velmi vysoká čísla, raději využívejte datový typ DECIMAL. U tohoto typu totiž neexistují prakticky žádná omezení a navíc ukládání hodnot je řešeno trochu jinak.)

U datových typů existuje možnost, jak jejich vlastnosti trochu poupravit. Děje se tak za pomoci atributů (jejich kompletní výčet uvedu v příštím díle). Tyto atributy se přidávají k vlastnímu datovému typu. Přímo u číselných datových typů se vyskytuje specifický atribut UNSIGNED. Pomocí něho lze zdvojnásobit kladný interval číselného typu, ale na druhou stranu do takto nadefinovaného pole nebudete smět ukládat záporná čísla. Jako příklad uvedu datový typ TINYINT, který – bude-li definován jako UNSIGNED TINYINT – změní interval z -128 až 127 na 0 až 255. Při změně atributů na UNSIGNED [typ] bude vypadat rozsah intervalů takto:

Název datového typu Interval
TINYINT 0 až 255
SMALLINT 0 až 65535
MEDIUMINT 0 až 16777215.
INT 0 až 4294967295
INTEGER 0 až 4294967295
BIGINT 0 až 18446744073709551615

Datové typy FLOAT, DOUBLE, REAL, DECIMAL a NUMERIC neumožňují atribut UNSIGNED použít.

Textové datové typy

Druhou významnou skupinou jsou textové datové typy. Tato skupina, jak již název napovídá, slouží k ukládání textu. Seznam dostupných typů je opět bohatý. Najdete ho v následující tabulce:

Název datového typu Maximální velikost Zabíraná paměť
CHAR (X) 255 bajtů X bajtů
VARCHAR (X) 255 bajtů X+1 bajt (při uložení max. znaků)
TINYTEXT 255 bajtů X+1 bajt
TINYBLOB 255 bajtů X+1 bajt
TEXT 65535 bajtů X+2 bajty
BLOB 65535 bajtů X+2 bajty
MEDIUMTEXT 1,6 MB X+3 bajty
MEDIUMBLOB 1,6 MB X+3 bajty
LONGTEXT 4,2 GB X+4 bajty
LONGBLOB 4,2 GB X+4 bajty

Ve většině případů si vystačíte s typy CHAR a VARCHAR. Parametr M udává, jaký může být maximální počet ukládaných znaků (maximálně 255). Když například přiřadíme některému poli datový typ CHAR (10), pak do tohoto pole bude možné ukládat řetězce o maximální velikosti 10 znaků. Pokud se sem budeme snažit uložit řetězec delší, nebude to sice chyba, ale MySQL automaticky uloží pouze prvních 10 znaků.

Základní rozdíl mezi těmito typy je v určování jejich délky. Již zmíněný typ CHAR (10) bude mít vždy délku 10 bajtů, i když do něj uložíte pouze 3 znaky. Naproti tomu typ VARCHAR (10), do něhož se uloží pouze 3 znaky, bude mít konečnou délku 4 bajty (X+1 bajt). Zde je tedy jasně patrná úspora místa. Oproti tomu pole s datovým typem CHAR jsou zpracovávána rychleji. Doporučuji tedy raději používat typ CHAR.

Kromě typů CHAR a VARCHAR občas ještě využijete typy TEXT a BLOB. Tyto typy jsou proměnné délky a jsou uzpůsobeny pro ukládání objemnějších dat jako například souborů, dlouhých textů... apod. Ukládání souborů tímto způsobem nedoporučuji, protože to zbytečně zvětšuje velikost databáze, tím snižuje její výkon a zvyšuje fragmentaci. Soubory proto ukládejte raději externě.

Toto byla první část výčtu dostupných datových typů. V příštím díle toto téma dokončím a také vám povím něco více o dostupných atributech.

Určitě si přečtěte

Články odjinud