abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
včera 22:22 | Komunita

Společnost Purism představila kryptografický token Librem Key. Koupit jej lze za 59 dolarů. Token byl vyvinut ve spolupráci se společností Nitrokey a poskytuje jak OpenPGP čipovou kartu, tak zabezpečení bootování notebooků Librem a také dalších notebooků s open source firmwarem Heads.

Ladislav Hagara | Komentářů: 0
včera 20:33 | Nová verze

Společnost NVIDIA oficiálně vydala verzi 10.0 toolkitu CUDA (Wikipedie) umožňujícího vývoj aplikací běžících na jejich grafických kartách. Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
včera 20:00 | Upozornění

Příspěvek Jak přežít plánovanou údržbu DNS na blogu zaměstnanců CZ.NIC upozorňuje na historicky poprvé podepsání DNS root zóny novým klíčem dne 11. října 2018 v 18:00. Software, který nebude po tomto okamžiku obsahovat nový DNSSEC root klíč, nebude schopen resolvovat žádná data. Druhým důležitým datem je 1. února 2019, kdy významní výrobci DNS softwaru, také historicky poprvé, přestanou podporovat servery, které porušují DNS standard

… více »
Ladislav Hagara | Komentářů: 4
včera 15:55 | Pozvánky

Spolek OpenAlt zve příznivce otevřených řešení a přístupu na 156. brněnský sraz, který proběhne v pátek 21. září od 18:00 v restauraci Na Purkyňce na adrese Purkyňova 80.

Ladislav Hagara | Komentářů: 0
včera 13:22 | Nová verze

Alan Griffiths z Canonicalu oznámil vydání verze 1.0.0 display serveru Mir (GitHub, Wikipedie). Mir byl představen v březnu 2013 jako náhrada X serveru a alternativa k Waylandu. Dnes Mir běží nad Waylandem a cílen je na internet věcí (IoT).

Ladislav Hagara | Komentářů: 0
20.9. 22:00 | Nasazení Linuxu
Stabilní aktualizace Chrome OS 69 (resp. Chromium OS), konkrétně 69.0.3497.95, přináší mj. podporu linuxových aplikací. Implementována je pomocí virtualizace, a proto je tato funkce také omezena na zařízení s dostatkem paměti a podporou hardwarové akcelerace, tudíž nejsou podporovány chromebooky s 32bitovými architekturami ARM, či Intel Bay Trail (tzn. bez Intel VT-x).
Fluttershy, yay! | Komentářů: 5
20.9. 21:32 | Zajímavý projekt
Došlo k uvolnění linuxové distribuce CLIP OS, vyvíjené francouzským úřadem pro kybernetickou bezpečnost ANSSI, jako open source. Vznikla za účelem nasazení v úřadech, kde je potřeba omezit přístup k důvěrným datům. Je založená na Gentoo.
Fluttershy, yay! | Komentářů: 1
20.9. 16:00 | Komerce

Zjistěte více o bezpečné a flexibilní architektuře v cloudu! IBM Cloud poskytuje bezpečné úložiště pro Vaše obchodní data s možností škálovatelnosti a flexibilitou ukládání dat. Zároveň nabízí prostředky pro jejich analýzu, vizualizaci, reporting a podporu rozhodování.

… více »
Fluttershy, yay! | Komentářů: 12
20.9. 12:22 | Nová verze

V dubnu letošního roku Mozilla představila webový prohlížeč pro rozšířenou a virtuální realitu Firefox Reality (GitHub). V úterý oznámila vydání verze 1.0. Ukázka na YouTube. Firefox Reality je k dispozici pro Viveport, Oculus a Daydream.

Ladislav Hagara | Komentářů: 2
20.9. 12:00 | Komunita

V srpnu loňského roku společnost Oracle oznámila, že Java EE (Enterprise Edition) bude uvolněna jako open source. O měsíc později bylo rozhodnuto, že tato open source Java EE bude přejmenována a předána Eclipse Foundation. Nové jméno bylo oznámeno v únoru letošního roku. Z Java EE se stala Jakarta EE. Eclipse Foundation včera oznámila dosažení dalšího milníku. Zdrojové kódy aplikačního serveru GlassFish jsou již k dispozici v git repozitářích Eclipse Foundation (GitHub).

Ladislav Hagara | Komentářů: 0
Na optické médium (CD, DVD, BD aj.) jsem naposledy vypaloval(a) data před méně než
 (13%)
 (14%)
 (21%)
 (23%)
 (25%)
 (4%)
 (1%)
Celkem 384 hlasů
 Komentářů: 33, poslední 16.9. 11:55
Rozcestník
Nástroje

MySQL - blbne kódování

Znakové sady pro komunikaci klienta se serverem a znakové sady pro uložení dat

Při problému se znakovou sadou je podstatné rozlišovat znakové sady pro:
  • komunikaci klienta se serverem
  • samotné uložení dat
ad a) Použité znakové sady při komunikaci server/klient ovlivňují 3 proměnné:
  • character_set_client - znaková sada, ve které jsou data poslána klientem
  • character_set_connection - znaková sada, do které jsou poslaná data od klienta překonvertována
  • character_set_results - znaková sada, ve které jsou výsledná data zaslána klientovi
vypsat proměnné související se znakovými sadami lze takto: show variables like '%character%';

Pro nastavení výše uvedených proměnných existují "zkratky":
  • set names x; je ekvivalentní (nezmiňuji nastavení collation):
    
    set character_set_client = x;
    set character_set_results = x;
    set character_set_connection = x;
    
    
  • set character set x; je ekvivalentní (nezmiňuji nastavení collation):
    
    set character_set_client = x;
    set character_set_results = x;
    set character_set_connection = @@character_set_database
    
    
  • parametr --default-character-set=x u mysql klienta a mysqldump odpovídá vykonání: set names x;
ad b) Znaková sada pro uložení dat se dá nastavit pro:
  • server - nastavení typicky v sekci [mysqld] v my.cnf
  • databázi - nastavení typicky při tvorbě databáze: create database x character set y;
  • tabulku - nastavení typicky při tvorbě tabulky: create table x ... character set y;
  • sloupec - nastavení typicky při tvorbě tabulky: ... columnx varchar(255) character set y ...
  • řetězec - např. _latin1'abc' - tzv. introducer
ověřit nastavení znakových sad lze pro tabulku a sloupce takto: show create table table_name; a pro databázi takto: show create database database_name; .

Schematický popis zpracování dat - konverze znakových sad

c_s je zkratkou pro: character_set
  1. klient pošle data serveru
  2. server provede konverzi z c_s_client do c_s_connection (nekonvertovány řetězce s introducerem)
  3. server provede konverzi z c_s_connection do znakové sady úložiště
  4. server data uloží

Možné chyby

Z toho vyplývají následující možné chyby:

Předpoklad: řetězec "příliš žluťoučký kůň" je kódován v utf8
  • špatná proměnná c_s_connection - chyba při konverzi c_s_client/c_s_connection. Příklad ukazuje možné úskalí při použití set character set a špatně nastavené znakové sady pro databázi.
    
    create database c_s_test character set latin1; 
    use c_s_test;
    create table t1 (data varchar(255)) character set utf8;
    /* znaková sada pro tabulku je utf8 */
    set character set utf8; 
    /* c_s_connection je stále nastavené na latin1 */
    insert into t1 values('příliš žluťoučký kůň');
    select convert(data using utf8) = _utf8'příliš žluťoučký kůň' from t1 limit 1;
    /* chyba - nerovnají se*/
    drop database c_s_test;
    
    
  • špatná proměnná c_s_client - chyba při konverzi c_s_client/c_s_connection. Data pošleme serveru ve špatném kódování.
    
    create database c_s_test character set utf8; 
    use c_s_test;
    create table t1 (data varchar(255)) character set utf8;
    set names utf8; 
    set character_set_client = latin1;
    /* c_s_client je nastaveno na latin1 */
    insert into t1 values('příliš žluťoučký kůň');
    select convert(data using utf8) = _utf8'příliš žluťoučký kůň' from t1 limit 1;
    /* chyba - nerovnají se*/
    drop database c_s_test;
    
    
  • Chyba při konverzi c_s_connection/znaková sada úložiště. Když máme nastavenou špatnou znakovou sadu pro tabulku, tak to taky není ono.
    
    create database c_s_test character set utf8; 
    use c_s_test;
    create table t1 (data varchar(255)) character set latin1;
    /* znaková sada pro tabulku je latin1 */
    set names utf8; 
    insert into t1 values('příliš žluťoučký kůň');
    select convert(data using utf8) = _utf8'příliš žluťoučký kůň' from t1 limit 1;
    /* chyba - nerovnají se*/
    drop database c_s_test;
    
    
  • Špatně nastavená proměnná c_s_results. Porovnání řetězců tentokrát vrátí 1 - data jsou uložena a zpracována bez chyb při konverzi. Schválně je nastavena jiná znaková sada pro character_set_connection. Dochází ke konverzi utf8 -> latin2 -> utf8. Pro tabulku můžete případně zvolit latin2 znakovou sadu a výsledek bude též správný. Výsledkem druhého selectu je ovšem špatná diakritika kvůli špatně nastavené proměnné c_s_results.
    
    create database c_s_test character set utf8; 
    use c_s_test;
    create table t1 (data varchar(255)) character set utf8;
    set names utf8;
    set character_set_connection = latin2;
    set character_set_results = latin1;
    insert into t1 values('příliš žluťoučký kůň');
    select convert(data using utf8) =  _utf8'příliš žluťoučký kůň' from t1 limit 1;
    /* OK vrátí 1*/
    select convert(data using utf8) from t1 limit 1;
    /* výsledkem je špatná diakritika */
    drop database c_s_test;
    
    

Související dokumenty

oficiální dokumentace MySQL (externí dokument)
FAQ na abclinuxu (FAQ)

Dokument vytvořil: razor, 21.2.2007 21:14 | Poslední úprava: DaBler, 30.10.2012 20:19 | Další přispěvatelé: razor | Historie změn | Zobrazeno: 3132×

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.