ARCHIV |
|||||
Software (10844)
Distribuce (131)
Skripty (697)
Menu
Diskuze
Informace
|
MySQL (58) - čeština v praxiPříliš žluťoučcí koně - prostě hrátky s nabodeníčky stokrát jinak a pokaždé s MySQL. Teorie bylo minule až dost, takže vzhůru na praktické uplatnění
vědomostí o MySQL a znakových sadách. Definice sloupce tabulkyPředevším je třeba vědět, že při definici tabulky lze v MySQL určit znakovou sadu a řazení pro každý sloupec zvlášť. V jediné tabulce tedy můžete mít sloupce s různým kódováním znaků. Příkaz, který to zajistí lze napsat nějak takto: CREATE TABLE cestina (
Samozřejmě, že v reálné aplikaci to většinou nebudete potřebovat. Tam často postačí definovat znakovou sadu pro celou tabulku, a tato znaková sada je pak použita pro všechny sloupce obsahující řetězce. CREATE TABLE
cestina_cela (
Leč zpátky k prvnímu příkladu. Pokud se nyní do tabulky cestina pokusíte zapsat data následujícím příkazem: insert into cestina
(win, latin, utf) values ('Příliš žluťoučký kůň pěl ďábelské
ódy','Příliš žluťoučký kůň pěl ďábelské ódy','Příliš žluťoučký kůň pěl
ďábelské ódy');
Skončíte na 99% chybovým hlášením "Data too long for column 'win' at
row 1", nebo něčím hodně podobným. Než se to pokusím vysvětlit, je
třeba uvést, že:
Client character setJakou znakovou sadu tedy vlastně používá řádkový klient mysql, když
"mluví" s databází? A vůbec - nějakou znakovou sadu přece musí používat
jakýkoli klient, řádkovým počínaje a třeba PHP skriptem konče, takže
jak to je? Odpověď je jednoduchá - server PŘEDPOKLÁDÁ, že klient bude
posílat data v určité znakové sadě! Ta je dána systémovou proměnnou
character_set_client a je předkonfigurována při instalaci. Pozn.: Což je pro neznalé hotové
neštěstí, neb až do verze 4.1 byla výchozí latin1 - něco, co našincům
moc vyhovovat nebude. Naštěstí se zdá, že většina instalací "pětek" má
přednastavenou utf8. To, jakou znakovou sadu Váš server od klienta očekává si můžete ověřit následujícím dotazem: SHOW VARIABLES LIKE
'character_set_client';
To byly špatné zprávy, teď něco dobrých. Bez ohledu na to, jaká je výchozí znaková sada si můžete poručit, že pro Vaše připojení budete používat specifickou sadu. To provedete pomocí veledůležitého příkazu SET NAMES. Jestliže tedy budu chtít ve zdraví provést příkaz INSERT INTO, jak je uveden výše, mohu na to jít nějak takhle: set names cp1250;
Důležité:
Mají-li se data do databáze dostat ve správné znakové sadě, musí tedy
platit ZÁROVEŇ tato dvě pravidla:
Pokud si příklady zkoušíte a zapsali jste cvičná data do tabulky, můžete je teď zkusit pomocí řádkového klienta zobrazit: a ejhle! Pokaždé se správně zobrazí jen ten sloupec, pro nějž je
odpovídajícím způsobem nastavena znaková sada. Čímž se vlastně
dostáváme k dalšímu tématu - a tím je spolupráce s PHP. MySQL, znakové sady a PHPTady není moc co dodat. Je třeba si uvědomit, že z hlediska databáze je PHP klient jako každý jiný, a že je tudíž namístě specifikovat v našich ctěných skriptech rovněž odpovídající příkaz SET NAMES, nějak takhle: <!DOCTYPE HTML PUBLIC "-//W3C//DTD
HTML 4.01 Transitional//EN">
Samozřejmě, že něco takového se musí udělat ještě předtím, než
databáze vrátí data, jinak je to zbytečné. Pokud si to chcete
vyzkoušet, zjistíte, že pokaždé jsou správně zobrazena jen data v
odpovídající znakové sadě, a že ostatní je "rozsypaný čaj". A co importy?Jestliže importujeme data do MySQL z textových souborů, je třeba
navíc dbát na to, aby i vstupní soubor s daty byl ve správné znakové
sadě. Jinak platí to, co jsme uvedli výše. Tedy:
Není to složité, když si uvědomíte, jak spolu jednotlivé věci souvisejí. Nepříjemné je, že musí být splněno více podmínek - a když nejsou, nevyjde to.
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 (6) - Ukládáme řetězce 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 (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 |