ARCHIV |
|||||
Software (10844)
Distribuce (131)
Skripty (697)
Menu
Diskuze
Informace
|
MySQL (6) - Ukládáme řetězceJak správně využít datové typy - dnes o řetězcích.
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:
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í:
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í:
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%';
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.
Související články
Předchozí Celou kategorii (seriál) Další
MySQL (1) - pestrý svět databází
MySQL (2) - Instalujeme databázi MySQL MYSQL (3) Instalujeme MySQL podruhé MySQL (4) - něco terminologie MySQL (5) - tajuplné SQL MySQL (7) - hrátky s čísly MySQL (8) - Ukládání datumů MySQL (9) - Další datové typy MySQL (10) - tvorba databáze. Základy DDL MySQL (11) - vytváříme tabulky MySQL (12) - tipy k tvorbě tabulek MySQL (13) - Vkládáme data MySQL (14) - Upravujeme data MySQL (15) - Odstraňujeme data MySQL (16) - Tipy a triky k manipulaci s daty MySQL (17) - vybíráme data MySQL (18) - Filtrujeme data MySQL (19) - Řadíme data MySQL (20) - spojení více tabulek MySQL (21) - klauzule JOIN MySQL (22) - tipy a triky ke spojování tabulek MySQL (23) - relace 1:N a N:N MySQL (24) - Seskupujeme záznamy MySQL (25) - hrátky se seskupenými záznamy MySQL (26) - Poddotazy MySQL (27) - Složitější dotazy MySQL (28) - Dotazy pro pokročilé MySQL (29) - Vracení nejvyšších záznamů MySQL (30) - průběžné součty MySQL (31) - Indexy MySQL (32) - ještě k indexům MySQL (33) - Příkaz UNION MySQL (34) - větvení kódu a pivotní tabulky MySQL (35) - vestavěné funkce MySQL (36) - Regulární výrazy MySQL (37) - použití fulltextového vyhledávání MySQL (38) - Fulltext a praxe MySQL (39) - typy tabulek v MySQL MySQL (40) - další typy tabulek MySQL (41) - Transakce MySQL (42) - ještě k transakcím MySQL (43) - Uložené procedury MySQL (44) - parametry uložených procedur MySQL (45) - větvení kódu uložených procedur MySQL (46) - Triggery MySQL (47) - Triggery a praxe MySQL (48) - UDF MySQL (49) - pohledy MySQL (50) - Pohledy podruhé MySQL (51) - Metadata MySQL (52) - A co zálohování? MySQL (53) - SELECT INTO OUTFILE MySQL (54) - zálohování MySQL z webu MySQL (55) - zálohování MySQL z pohledu správce MySQL (56) - Obnova zálohovaných dat MySQL (57) - Ach, ta čeština MySQL (58) - čeština v praxi MySQL (59) - české řazení MySQL (60) - řádkový klient MySQL (61) - Oprávnění MySQL (62) - Oprávnění podruhé MySQL (63) - jemné nastavení práv MySQL (64) - nad dotazy čtenářů MySQL (65) - Ladíme server MySQL (66) - Ještě k ladění serveru MySQL - (67) MySQL (68) - Závěr MySQL (69) - Prepared Statements Předchozí Celou kategorii (seriál) Další
|
Vyhledávání software
Vyhledávání článků
28.11.2018 23:56 /František Kučera 12.11.2018 21:28 /Redakce Linuxsoft.cz 6.11.2018 2:04 /František Kučera 4.10.2018 21:30 /Ondřej Čečák 18.9.2018 23:30 /František Kučera 9.9.2018 14:15 /Redakce Linuxsoft.cz 12.8.2018 16:58 /František Kučera 16.7.2018 1:05 /František Kučera
Poslední diskuze
31.7.2023 14:13 /
Linda Graham 30.11.2022 9:32 /
Kyle McDermott 13.12.2018 10:57 /
Jan Mareš 2.12.2018 23:56 /
František Kučera 5.10.2018 17:12 /
Jakub Kuljovsky | |||
ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2024) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze |