LINUXSOFT.cz Přeskoč levou lištu

ARCHIV



   

> 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 55093×

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í:

  1. 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.
  2. 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.
  3. 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

pridej.cz

 

DISKUZE

TEXT 2.5.2006 21:51 Joe
  L Re: TEXT 1.2.2012 14:57 M Podbi




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 ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2024) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze