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í
×
    dnes 03:22 | IT novinky

    Apple představil iPhone Pocket pro stylové přenášení iPhonu. iPhone Pocket vzešel ze spolupráce značky ISSEY MIYAKE a Applu a jeho tělo tvoří jednolitý 3D úplet, který uschová všechny modely iPhonu. iPhone Pocket s krátkým popruhem se prodává za 149,95 dolarů (USA) a s dlouhým popruhem za 229,95 dolarů (USA).

    Ladislav Hagara | Komentářů: 0
    dnes 02:33 | Nová verze

    Byla vydána nová stabilní verze 7.7 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 142. Přehled novinek i s náhledy v příspěvku na blogu.

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

    Společnost Epic Games vydala verzi 5.7 svého proprietárního multiplatformního herního enginu Unreal Engine (Wikipedie). Podrobný přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 16:22 | Bezpečnostní upozornění

    Intel vydal 30 upozornění na bezpečnostní chyby ve svých produktech. Současně vydal verzi 20251111 mikrokódů pro své procesory.

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

    Byla vydána říjnová aktualizace aneb nová verze 1.106 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.106 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

    Ladislav Hagara | Komentářů: 0
    včera 12:11 | Komunita

    Canonical pro své zákazníky, předplatitele Ubuntu Pro, prodloužil podporu Ubuntu LTS z 12 let na 15 let (Legacy add-on). Týká se verzí od 14.04 (Trusty Tahr).

    Ladislav Hagara | Komentářů: 2
    včera 05:11 | Nová verze

    Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 5.0.0. Nově je oficiálně podporován Linux ARM64/AArch64. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.

    Ladislav Hagara | Komentářů: 6
    včera 00:33 | Nová verze

    Byla vydána verze 10 dnes již multiplatformního open source frameworku .NET (Wikipedie). Přehled novinek v příspěvku na blogu Microsoftu. Další informace v poznámkách k vydání na GitHubu nebo v přednáškách na právě probíhající konferenci .NET Conf 2025.

    Ladislav Hagara | Komentářů: 0
    12.11. 22:33 | IT novinky

    Rodina hardwaru služby Steam se začátkem roku 2026 rozroste. Steam Deck doplní nový Steam Controller, herní PC Steam Machine se SteamOS s KDE Plasmou a bezdrátový VR headset s vlastními ovladači Steam Frame.

    Ladislav Hagara | Komentářů: 2
    12.11. 16:22 | IT novinky

    Amazon Web Services (AWS) oznámil (en) výstavbu Fastnetu – strategického transatlantického optického kabelu, který propojí americký stát Maryland s irským hrabstvím Cork a zajistí rychlý a spolehlivý přenos cloudových služeb a AI přes Atlantik. Fastnet je odpovědí na rostoucí poptávku po rychlém a spolehlivém přenosu dat mezi kontinenty. Systém byl navržen s ohledem na rostoucí provoz související s rozvojem umělé inteligence a

    … více »
    Ladislav Hagara | Komentářů: 0
    Jaké řešení používáte k vývoji / práci?
     (35%)
     (47%)
     (18%)
     (18%)
     (22%)
     (15%)
     (23%)
     (16%)
     (16%)
    Celkem 348 hlasů
     Komentářů: 16, poslední 12.11. 18:21
    Rozcestník

    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: 3786×

    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.