MySQL (6) - Ukládáme řetězce
Jak správně využít datové typy - dnes o řetězcích.
18.3.2005 15:00 |
Petr Zajíc
| Články autora
| přečteno 55646×
Pojďme se v několika dalších dílech seriálu podrobně podívat na
datové typy, které má databáze MySQL
pro uložení dat k dispozici. Jejich zvládnutí, jak ještě uvidíme, je
totiž základním pilířem úspěšné práce s databází a vede rovněž k tomu,
že je práce daty prováděna tím nejrychleším možným způsobem.
Srovnání s programovacími jazyky
Nejprve jedno malé varování. Jestliže zvolíte nesprávný datový dyp
pro uložení proměnné v klasických programovacích jazycích (např. v C
apod.), je to samozřejmě nesprávně. Například zbytečně velký datový typ
spotřebuje o něco více paměti a program může běžet výrazně pomaleji. V
databázích je to však MNOHEM HORŠÍ.
Nesprávný datový typ může způsobit to, že databáze o dost naroste a
že se zpomalí. Jak již jsme totiž v seriálu uvedli, musí být pro
jeden sloupec pevně stanoven datový typ a ten budou používat všechny
řádky. Drsnost, s jakou se vám vrátí špatný návrh datových typů pro
jednotlivé sloupce bude tedy přímo úměrná počtu řádků v té které
tabulce. Když k tomu přičtete fakt, že tabulka se obvykle navrhuje jen
jednou a pak se již "jen" plní daty, je při nepozorně zvoleném datovém
typu zaděláno na pořádné problémy.
Abych ale jen nestrašil: V MySQL, stejně jako v mnoha jiných
databázových systémech je možné změnit typ sloupce, a to obvykle bez
ztráty dat (například změna z celého čísla na řetězec a podobně). Někdy
to ovšem možné není a někdy konverzi existujících dat provází změna
jejich přesnosti nebo jiné problémy, není proto nic lepšího, než si vše
řádně promyslet předem.
Rozdělení datových typů MySQL
Stejně, jako je tomu v každém DBMS, jsou i v MySQL určité "základní"
datové typy. Tím mám na mysli ty, které se vám vyplatí znát z hlavy,
protože se budou objevovat téměř v každé tabulce. Úplně to
nejjednodušší rozdělení je, že v databázi MySQL můžete skladovat:
- řetězce
- čísla
- datumy
- prázdné hodnoty (tedy nic)
Obecně mohou mít řetězce pevnou či proměnnou délku, a mívají
specifikovánu znakovou sadu. Čísla mohou být se znaménkem nebo bez
znaménka, celá či desetinná, přesná nebo nepřesná. Datumy pak mohou
obsahovat údaj o datu, čase nebo oba údaje. A prázdná hodnota je
natolik zajímavým databázovým jevem, že se k ní ještě podrobně vrátíme.
Pojďme se teď podívat na jednotlivé datové typy trochu podrobněji -
dnes na řetězce.
Řetězce
Chcete-li uložit do databáze krátké řetězce (například jména a
příjmení), použijte datový typ CHAR nebo VARCHAR. Pokud chcete tyto
typy
použít, musíte vědět, jak dlouhé mohou znaky maximálně být. Rozdíl mezi
CHAR a VARCHAR je především v tom, že se jinak ukládají:
- Datový typ CHAR se ukládá vždy jako řetězec s daným počtem znaků.
Je-li definován například jako CHAR (30) a zadáte-li do něj hodnotu
HONZA, bude v databázi uloženo HONZA a k tomu pětadvacet mezer. Když se
z databáze údaj načítá, jsou mezery na konci řetězce odřízuty a údaj je
vrácen bez nich
- Datový typ VARCHAR se ukládá jako řetězec s proměnlivým počtem
znaků. Neboli, je vždy uložen jak řetězec, tak počet znaků, které
zabírá. V předchozím případě by například byl uložen řetězec HONZA a
údaj o tom, že je 5 znaků dlouhý. Když se údaj z databáze načítá, jsou
mezery na konci řetězce odřízuty a údaj je vrácen bez nich stejně, jako
je tomu při použití typu CHAR.
Možná se ptáte, jaký má smysl ukládat u typu CHAR do databáze
zbytečné mezery. Databáze tím přece nabyde na objemu, ne? To je pravda;
na druhou stranu je však získávání dat s pevnou délkou mnohem rychlejší
než získávání dat s délkou proměnlivou. Obecná rada tedy je: Mají-li
data pevnou nebo víceméně pevnou šířku, ukládejte je jako CHAR,
jestliže se šířka dost mění, používejte VARCHAR.
Výchozí chování MySQL je takové, že při ukládání a vracení řetězců
nemění velikost písmen. To je ostatně to, co bychom asi čekali. Jinak
je k manipulaci s řetězci v MySQL k dispozici celá řada funkcí; budeme
se jimi zabývat později.
Z toho, co bylo řečeno výše vyplývá jedna dosti podstatná
nepříjemnost. Jelikož oba uvedené datové typy odřezávají koncové
mezery, neexistovala donedávna žádná možnost, jak uložit a spolehlivě
vrátit pomocí typů CHAR nebo VARCHAR řetězce, mající na konci mezery.
Jediná možnost byla použít typ BLOB, o němž bude v seriálu řeč
zanedlouho.
Toto chování, kdy se nevracejí uživatelem zadané mezery na konci
řetězců navíc odporuje normě. Ve verzi MySQL 5.0.3 je tato
nepříjemnost odstraněna a typy CHAR a VARCHAR jdou nastavit tak, aby
vracely i mezery na konci (samozřejmě jen tehdy, pokud byly součástí
zadávaných dat).
Další důležitá informace: Když se do polí typu CHAR nebo VARCHAR
pokusíte uložit delší data, než jaká je sloupec schopen pojmout, příkaz
NESELŽE. V závislosti na tom, co se stalo může nastat jedna z
následujících tří věcí:
- Data se oříznou a příkaz se tváří, jako by se nic nestalo. To
nastane v případě, kdy oříznutými znaky jsou pouze mezery.
- Data se oříznou a příkaz vrátí varování (warning). To nastane v
případě, kdy oříznutím "utrpí" i jiné znaky kromě mezer.
- Data se oříznou a příkaz vrátí chybu (error). To nastane v
případě, kdy oříznutím utrpí i jiné znaky kromě mezer a server je
nastaven, aby místo varování skončil příkaz chybou
V souvislosti s řetězci je často slyšet výrazy "character set"
(znaková sada) a "collation" (porovnávání). Znaková sada je přesně to,
co například v HTLM stránce - tedy kódování textu. MySQL podporuje
všechny běžné české znakové sady (utf-8, latin2 neboli ISO-8859-2 a
cp1250, středoevropské windows) a to jak na úrovni serveru, tak na
úrovni sloupce. Neboli, znakovou sadu můžete definovat jako součást
sloupce typů CHAR a VARCHAR; když to neuděláte, použije se výchozí
znaková sada serveru. Zobrazit použitelné znakové sady můžete zadávním
MySQL
příkazu
show character set;
Collation (neboli třídění) je jiná věc. Dalo by se zjednodušeně
říci, že každá znaková sada může mít jedno a více třídění. Seznam
dostupných třídění dané instance serveru lze zobrazit pomocí příkazu
show collation;
Pokud chceme, můžeme ke znakové sadě sloupce datového typu přiřadit
některé z existujících způsobů řazení; pokud to neuděláme, použije se
to řazení, které je pro danou znakovou sadu nastaveno jako výchozí.
Předpokládám, že již asi tušíte, k čemu povedou následující příkazy:
show collation like
'utf8%';
show collation like 'latin2%';
show collation like 'cp1250%';
Práce se znakovými sadami a řazeními je tak důležitá, že ji později
v seriálu věnujeme více prostoru. Příště se však zaměříme na práci s
nejrůznějšími datovými typy, do nichž se v MySQL dají uložit čísla.
Verze pro tisk
|
Příspívat do diskuze mohou pouze registrovaní uživatelé.
|
|

Vyhledávání software

Vyhledávání článků
28.11.2018 23:56 /František Kučera Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1
12.11.2018 21:28 /Redakce Linuxsoft.cz 22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář
6.11.2018 2:04 /František Kučera Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
4.10.2018 21:30 /Ondřej Čečák LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář
18.9.2018 23:30 /František Kučera Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
9.9.2018 14:15 /Redakce Linuxsoft.cz 20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business.
Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář
12.8.2018 16:58 /František Kučera Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář
16.7.2018 1:05 /František Kučera Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář
Více ...
Přidat zprávičku
 Poslední diskuze
31.7.2023 14:13 /
Linda Graham iPhone Services
30.11.2022 9:32 /
Kyle McDermott Hosting download unavailable
13.12.2018 10:57 /
Jan Mareš Re: zavináč
2.12.2018 23:56 /
František Kučera Sraz
5.10.2018 17:12 /
Jakub Kuljovsky Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?
Více ...
|