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

> MySQL (57) - Ach, ta čeština

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

3.2.2006 06:00 | Petr Zajíc | Články autora | přečteno 24709×

Komerční sdělení: Pořádáme Kurzy MySQL

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:

  1. Při importu dat do databáze nebo při ukládání znakových dat sesbíraných pomocí nějaké klientské aplikace
  2. Při interní manipulaci s řetězci uvnitř MySQL
  3. Při zobrazení dat "vně" databáze, prostě když je chceme vydolovat a použít

Lehce si to celé rozeberme, abychom pochopili, jak to všechno souvisí. Platí totiž zásada, že buď:

  • je dobré při manipulaci se znakovými sadami vybrat si jednu a té se držet, nebo
  • používat několik znakových sad a na správném místě provést konverzi mezi nimi pomocí nástrojů, které poskytuje MySQL nebo podkladový operační systém

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 dat

Nezří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 daty

Tř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 dat

Vlastně 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í dat

Abych 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 problematiky

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

Verze pro tisk

pridej.cz

 

DISKUZE

Nejsou žádné diskuzní příspěvky u dané položky.



Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

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ář

1.5.2017 20:31 /Pavel `Goldenfish' Kysilka
PR: 25.5.2017 proběhne v Praze konference na téma Firemní informační systémy. Hlavními tématy jsou: Informační systémy s vlastní inteligencí, efektivní práce s dokumenty, mobilní přístup k datům nebo využívání cloudu.
Přidat komentář

15.4.2017 15:20 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě IoT a radiokomunikace? Přijď na sraz spolku OpenAlt, který se bude konat ve středu 19. dubna od 18:30 v Šenkovně (Sokolská 60, Praha 2).
Přidat komentář

5.3.2017 19:12 /Redakce Linuxsoft.cz
PR: 23. března proběhne v Praze konferenci na téma Cloud computing v praxi. Hlavními tématy jsou: Nejžhavější trendy v oblasti cloudu a cloudových řešení, Moderní cloudové služby, Infrastruktura současných cloudů, Efektivní využití cloudu, Nástrahy cloudových řešení a jak se jim vyhnout.
Přidat komentář

27.2.2017 22:12 /František Kučera
Pozvánka na 137. sraz OpenAlt – Praha: Tentokrát jsme si pro vás připravili neobvyklou akci. Ve středu 1.3. v 17:30 nás přivítá sdružení CZ.NIC ve svých prostorách v Milešovské ulici číslo 5 na Praze 3, kde si pro nás připravili krátkou prezentaci jejich činnosti. Následně navštívíme jejich datacentrum pod Žižkovskou věží. Provedou nás prostory, které jsou běžnému smrtelníkovi nedostupné!
Po ukončení prohlídky se všchni odebereme do hostince U vodoucha, Jagelonská 21, Praha 3 pochutnat si na některém z vybraných piv či dát si něco na zub. Rezervaci máme od 19:30, heslo je OpenAlt.
Ale pozor! Do prostor datového centra máme omezený přístup, dostane se tam pouze 10 lidí! Takže kdo přijde dříve, ten má přednost, a občanky s sebou! Kdo nebude chtít na prohlídku datového centra, může se pomalu přesunout do hostince U vodoucha a u nepřeberné nabídky piv počkat na ostatní.
Přidat komentář

18.1.2017 0:49 /František Kučera
Členové a příznivci spolku OpenAlt se pravidelně schází v Praze a Brně. Fotky z pražských srazů za uplynulý rok si můžete prohlédnout na stránkách spolku. Příští sraz se koná už 19. ledna – tentokrát je tématem ergonomie ovládání počítače – tzn. klávesnice, myši a další zařízení. Také budete mít příležitost si prohlédnout pražský hackerspace Brmlab.
Přidat komentář

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

> Poslední diskuze

26.7.2017 21:12 / Jaromir Obr
Podminka

15.6.2017 9:34 / Ondřej Havlas
php,

10.6.2017 10:39 / Temple
sell home for cash

11.5.2017 23:32 / lelo
Re: Problém se správcem balíčků

11.5.2017 5:45 / davd mašek
Re: Problém se správcem balíčků

Více ...

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