LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

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

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ů

15.1.2018 0:51 /František Kučera

První letošní pražský sraz se koná již tento čtvrtek 18. ledna od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Vítáni jsou všichni příznivci svobodného softwaru a hardwaru, ESP32, DIY, CNC, SDR nebo dobrého piva. Prvních deset účastníků srazu obdrží samolepku There Is No Cloud… just other people's computers. od Free Software Foundation.


Přidat komentář

14.11.2017 16:56 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt – tradičně první čtvrtek před třetím pátkem v měsíci: 16. listopadu od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.11.2017 11:06 /Redakce Linuxsoft.cz
PR: 4. ročník odborné IT konference na téma Datová centra pro business proběhne již ve čtvrtek 23. listopadu 2017 v konferenčním centru Vavruška, v paláci Charitas, Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00. Konference o návrhu, budování, správě a efektivním využívání datových center nabídne odpovědi na aktuální a často řešené otázky, např Jaké jsou aktuální trendy v oblasti datových center a jak je využít pro vlastní prospěch? Jak zajistit pro firmu či jinou organizaci odpovídající služby datových center? Podle jakých kritérií vybrat dodavatele služeb? Jak volit součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně spravovat datové centrum? Jak eliminovat možná rizika? apod.
Přidat komentář

13.9.2017 8:00 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt – tentokrát netradičně v pondělí: 18. září od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

3.9.2017 20:45 /Redakce Linuxsoft.cz
PR: Dne 21. září 2017 proběhne v Praze konference "Mobilní řešení pro business". Hlavní tématy konference budou: nejnovější trendy v oblasti mobilních řešení pro firmy, efektivní využití mobilních zařízení, bezpečnostní rizika a řešení pro jejich omezení, správa mobilních zařízení ve firmách a další.
Přidat komentář

15.5.2017 23:50 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 18. května od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.5.2017 16:42 /Honza Javorek
PyCon CZ, česká konference o programovacím jazyce Python, se po dvou úspěšných ročnících v Brně bude letos konat v Praze, a to 8. až 10. června. Na konferenci letos zavítá např. i Armin Ronacher, známý především jako autor frameworku Flask, šablon Jinja2/Twig, a dalších projektů. Těšit se můžete na přednášky o datové analytice, tvorbě webu, testování, tvorbě API, učení a mentorování programování, přednášky o rozvoji komunity, o použití Pythonu ve vědě nebo k ovládání nejrůznějších zařízení (MicroPython). Na vlastní prsty si můžete na workshopech vyzkoušet postavit Pythonem ovládaného robota, naučit se učit šestileté děti programovat, efektivně testovat nebo si v Pythonu pohrát s kartografickým materiálem. Kupujte lístky, dokud jsou.
Přidat komentář

2.5.2017 9:20 /Eva Rázgová
Putovní konference československé Drupal komunity "DrupalCamp Československo" se tentokrát koná 27. 5.2017 na VUT FIT v Brně. Můžete načerpat a vyměnit si zkušenosti z oblasti Drupalu 7 a 8, UX, SEO, managementu týmového vývoje, využití Dockeru pro Drupal a dalších. Vítáni jsou nováčci i experti. Akci pořádají Slovenská Drupal Asociácia a česká Asociace pro Drupal. Registrace na webu .
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

16.1.2018 1:08 / Ivan Pittner
verejna ip od o2 ubuntu

15.1.2018 17:26 / Mira Harvalik
Re: Jak udělat HTML/Javascript swiping gallery do mobilu?

30.12.2017 20:16 / Michal Knoll
odmocnina

31.8.2017 12:11 / Jaromir Obr
Re: ukůládání dat ze souboru

30.7.2017 11:12 / Jaromir Obr
Národní znaky

Více ...

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