ARCHIV |
|||||
Software (10844)
Distribuce (131)
Skripty (697)
Menu
Diskuze
Informace
|
MySQL (57) - Ach, ta češtinaPodle mě musí existovat spojení mezi slovy "konverze" a "kontroverze". Máloco je totiž ve spojení s MySQL tak časté, jako dotazy ohledně češtiny a znakových sad vůbec. Rozeberme to. Dozrál čas věnovat se dotazům, které se v té či oné formě pravidleně
objevují v mojí e-mailové schránce a které se v souvislosti s MySQL tak
či onak dotýkají znakových sad. Naše požehnaná mateřština disponuje
celou řadou hlásek s háčky a čárkami, což programátorovi a správci
databáze může pěkně zatopit. Postupně si ukážeme, že porozumět tomu,
jak se chová MySQL v takových situacích není zase až tak složité, pokud
člověk vezme v úvahu všechny faktory. Leč postupně, nejprve trocha té
nezbytné teorie. MySQL, znakové sady a potíže s nimiŘetězce v databázi mohou být uloženy v mnoha znakových sadách. MySQL
tento pohled na věc velmi dobře podporuje. Znaková sada zde může být
specifikována pro celý server, pro jednu databázi, pro jednu tabulku
nebo dokonce pro jediný sloupec. Nicméně je třeba pochopit
celý mechanismus a správně ho uplatnit, aby to všechno fungovalo k naší
spokojenosti. Kdy se
vlastně v souvislosti s MySQL a řetězci musíme zajímat o znakové sady?
V několika hlavních situacích:
Lehce si to celé rozeberme, abychom pochopili, jak to všechno
souvisí. Platí totiž zásada, že buď:
Pozn.: Pro mě je "správný" ten první postup. Ke konverzím se uchyluji jen když je to nezbytné, třeba když musím spolupracovat s více oddělenými systémy s jiným kódováním. Import nebo vstup datNezřídka je nutné importovat data do MySQL z externích zdrojů, jak
jsme o tom psali minule. Například pokud se jedná o import textových
souborů - jsou uloženy ve správné znakové sadě? Pokud vaše distribuce
používá UTF-8, pak budou textová data nejspíš v tomto kódování. Pokud
máte něco jiného (jako je soubor pocházející z Windows), bude třeba
na to myslet již před importem. Pozn.: Situace, kdy se naimportují data
v neodpovídající znakové sadě je zejména u začátečníků poměrně častá.
Obyčejně je mnohem účinnější provést import znovu, než se snažit o
opravu existujících dat uvitř databáze. Manipulace s datyTřebaže se to nezdá, je i tady zapotřebí mít se na pozoru. Především je MySQL hodně flexibilní, takže v jedné databázi, i dokonce v jediné tabulkce můžete mít data v několika znakových sadách. Takže, příkaz INSERT nebo UPDATE může s nabodeníčky krásně zamíchat, pokud si na to nedáte pozor. Další často opomíjenou skutečností je fakt, že v určitém kódování funguje rovněž klient, kterého používáte (jako je řádkový klient nebo PHPMyAdmin). Pokyny, které databáze dostane tedy musejí přijít se správnou diakritikou, aby to celé mohlo smysluplně pracovat. Hezky je to vidět na příkazech SELECT: select * from pracovnik
where prijmeni = 'Žežulka' and obec = 'Středoplky' To může být sice napsáno správně, a v databázi mohou odpovídající
záznamy existovat, přesto však někdy nedostaneme to, co potřebujeme.
Důvodem může být nešťastná konverze, kterou klient provede předtím, než
databáze pokyn obdrží. Může vzniknout jen těžko dohledatelná chyba nebo
mohou být nalezeny záznamy, které jsme nechtěli. Výstup datVlastně to hezky souvisí s oběma předchozími problémy: Nějaký
konzument dat (desktopová aplikace, webová stránka nebo cokoli jiného)
požaduje znaková data a databáze mu je pošle. Zobrazí se na výstupu to,
co jsme potřebovali? To bude opět záviset na více faktorech. Především
je nutné, aby klient dokázal o data správně požádat, a potom také to,
aby je správně předložil uživateli. V případě webových aplikací bude nejspíš výstupem nějaká HTML
stránka, která ovšem rovněž používá kódování. Takže, může vzniknout
několik problémů, které spolu souvisejí. Postupně si v tomto seriálu
ukážeme, jak se celý ten zašmodrchanec dá rozplést. Řazení datAbych předešel případným dotazům, řeknu to rovnou: řazení znakových
dat sice souvisí se znakovými sadami, ale není
to totéž. V databázi můžeme například mít znaková data v UTF-8 a
požadujeme jejich české řazení, stejně tak ale pro UTF-8 data můžeme
chtít řazení anglické nebo německé. Tomuto tématu se budeme věnovat
později, teď jen zásada: Nastavení znakové sady pro databázi není totéž
co nastavení způsobu řazení dat. Lehký úvod do problematikyJak vidíte, je toho dost a jistě nám tato látka vystačí na více dílů seriálu. Obecně lze říci, že MySQL podporuje více znakových sad, přičemž záleží na nastavení při kompilaci, které budou k dispozici. Seznam dostupných znakových sad můžete zobrazit příkazem SHOW CHARACTER SET; a seznam dostupných řazení pak pomocí příkazu SHOW COLLATION;
Pozn.: Nelekněte se. Moje výchozí
instalace MySQL "pětky" obsahuje 36 znakových sad a 124 vestavěných
způsobů řazení dat, takže je toho opravdu dost. V praxi však budete
používat většinou jen zlomek toho, co je ve skutečnosti k dispozici. My se příště podíváme na praktický příklad, jak se se znakovými
sadami vypořádat v situacích, které jsem nastínil. Dopředu prozradím,
že budu doporučovat používání UTF-8 podobně, jako to děláme tady na
serveru při psaní stránek. Rovněž naznačím, co Vás může potkat za
problémy a jak se s nimi vypořádat; a pokusím se zodpovědět nejčastější
dotazy, které mi v té souvislosti chodí. A ještě něco: Příště udělám trochu ústupek a použiju příklady psané v PHP, přestože jsem si předsevzal, že se v tomto seriálu budu snažit věnovat pouze databázi bez vazby na konkrétní programovací jazyky. Důvod je prostý - většina lidí takto MySQL používá a problémy se mohou prolínat, takže zahrnu do vysvětlování i PHP.
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 (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 |