České řazení jmen

České řazení jmen

autor Lukáš Mižoch -
Počet odpovědí: 21

Nevím, zda se to zde již neřešilo, ale při hledání jsem našel jen odkaz na starší článek. Jde mi o to, že Moodle špatně řadí česká jména s diakritikou na začátku a nerespektuje ani CH. Dá se s tím něco dělat?

Počet hodnocení: -
V odpovědi na Lukáš Mižoch

Re: České řazení jmen

autor David Mudrák -
Obrázek: Moodle HQ Obrázek: Obzvláště nápomocní moodlisté Obrázek: Překladatelé Obrázek: Vývojáři
Ahoj Lukáši,

pokud si dobře pamatuji, používáš MySQL. Zkontroluj si nastavení COLLATE na tvé Moodle databázi. Měl bys mít COLLATE utf8_czech_ci. Případná změna je, pokud si dobře pamatuju, možná pouze pomocí dump, vytvořit novou databázi podle pokynů v Instalace a import dat zpátky.

--mudrd8mz
V odpovědi na David Mudrák

Re: České řazení jmen

autor Lukáš Mižoch -

Mám tam utf8_unicode_ci, takže chyba bude asi ještě někde jinde, že?

V odpovědi na Lukáš Mižoch

Re: České řazení jmen

autor David Mudrák -
Obrázek: Moodle HQ Obrázek: Obzvláště nápomocní moodlisté Obrázek: Překladatelé Obrázek: Vývojáři
Hmm... Můžeš dát konkrétní příklad, na jaké stránce se ti to zobrazuje špatně? Já mám třeba seznam účastníků kurzu v pořádku. Resp. písmena s diakritikou se mi řadí správně. "Ch" se považuje za "C", ale to je vlastnost (resp. chyba) mé verze PostreSQL, která narozdíl od novějších MySQL neumožňuje takovéto ryze hezky česky specifické nastavení collation.

Mimochodem - pravidla pro řazení podle abecedy má čeština jedny z nejkomplikovanějších a dle mých informací byly právě řadící algoritmy v MySQL testovány mimo jiné na češtině. Více např. zde.

--mudrd8mz
V odpovědi na Lukáš Mižoch

Re: České řazení jmen

autor Jiri Zajic -
No jenže ono tam má být COLLATE utf8_czech_ci
V odpovědi na Lukáš Mižoch

Re: České řazení jmen

autor Lukáš Mižoch -

Tak jsem zkusil export, smazal databázi, vytvořil novou (s collate utf8_czech_ci), naimportoval jsem data a všechny tabulky jsou zase v utf8_unicode_ci. Přitom v SQL dumpu nikde utf8_unicode_ci není, tak kde to sakra vzal? mrzutost

V odpovědi na Lukáš Mižoch

Re: České řazení jmen

autor František Pinc -
Dobrý den,
asi to bude tím , že máte na serveru nastavené výchozí collate a charset na něco jiného, takže pokud to v tom dumpu explicitně neřeknete , že tabulka má být s collate utf8_czech_ci, tak to udělá podle výchozího.

Na vašem místě bych zkusil :

ALTER TABLE user CONVERT TO CHARACTER SET utf8 COLLATE utf8_czech_ci;


Podle mě to je povolená úprava tabulky a změnu collate není třeba dělat přes dump. Teda našel jsem to v dokumentaci k MySQL 5.0 http://dev.mysql.com/doc/refman/5.0/en/alter-table.html .
Zkuste to nejprve na nějakém testovacím prostředí , protože jsem to nezkoušel a mám taky takové tušení, že jsem někdy někde slyšel, že nejde měnit collate u již založené tabulky . Třeba to bude dlouho trvat..... (???) . Taky nevím, co na to řeknou indexy......(???)
V odpovědi na František Pinc

Re: České řazení jmen

autor František Pinc -
Zdá se, že by to mělo jít udělat i s celou DB podle dokumentace na http://dev.mysql.com/doc/refman/5.0/en/charset-database.html
ALTER DATABASE db_name
 [[DEFAULT] CHARACTER SET charset_name]
 [[DEFAULT] COLLATE collation_name]
V odpovědi na František Pinc

Re: České řazení jmen

autor David Mudrák -
Obrázek: Moodle HQ Obrázek: Obzvláště nápomocní moodlisté Obrázek: Překladatelé Obrázek: Vývojáři
Já už MySQL nepoužívám, takže nevím. Ale co si matně pamatuji, tak když není u tabulky řečeno jinak, mělo by se použít výchozí pro databázi. Totéž pak snad platí pro sloupec versus tabulka. Nastavit výchozí collate pro celý server zní jako dobrý nápad.
Kdysi jsem si na to psal skriptík, který něco takového zavolal nad každou tabulkou v Moodle databázi. Změnit to jen na úrovni databáze nefungovalo.
V odpovědi na František Pinc

Re: České řazení jmen

autor Lukáš Mižoch -

Tohle bohužel nastaví jen kódování a třídění pro databázi, ale ne pro tabulky uvnitř. Nicméně naimportoval jsem dump a pak na to spustil PHP skript, který mi postupně převedl všechny tabulky. A funguje to. úsměv

V odpovědi na Lukáš Mižoch

Re: České řazení jmen

autor František Pinc -
Zdravíčko všem,
v souvislosti s tímto forem jsem zjistil, že mám na jednom moodlu nastavené collate na utf8_general_ci u všech tabulek , tak mě napadlo , že si to předělám na utf8_czech_ci . Vyzkoušel jsem si to na kopii, vše se zdálo ok , i na ostré databázi vše proběhlo v pořádku. Všude mám nyní collate utf8_czech_ci a pozoruji značné zpomalení MySQL. Dovedu si představit, že to bude větší zátěž pro MySQL, ale odhadovl bych to maximálně v jednotkách procent. To co zažívám nyní server je u některých tabulek 600% až 1000%. Zapl jsem si log_slow_queries a týká se to především dotazů na statistiky (tabulky začínající na stats_ ), log a role_. Tedy vesměs tabulky, kde je české collate víceméně zbytečné. Dneska večer se to chystám předělat zpět, ale napadlo mě se ještě zeptat tady, jestli něco podobného někdo nezažil.

Taky jsem si všiml, že pokud je zapnuté české collate , tak ve vyhledávání předmětů není možné hledat bez hacku a carek. Pokud je zapnuté utf8_general_ci, tak hledání předmětů vrací očekávané výsledky, i tehdy, pokud slova zadám bez hacku a carek. Dá se nějak zkombinovat správné řazení podle abecedy a současně komfort vyhledávání i bez hacku a carek?
V hledání uživatelů jsem tento problém nepozoroval.

Dík za radu!
V odpovědi na František Pinc

Re: České řazení jmen

autor David Mudrák -
Obrázek: Moodle HQ Obrázek: Obzvláště nápomocní moodlisté Obrázek: Překladatelé Obrázek: Vývojáři
Františku, tady bohužel nemůžu sloužit. Vím, že větší instituce si dopisují vlastní skripty pro pravidelné odlévání tabulky mdl_log stranou a zapínají automatické ořezávání protokolů. Tím se celá tabulka změnší a operace nad í jsou rychlejší.
O výkonnostních charakteristikách utf_czech _ci nevím nic, ale desetinásobné zpomalení je opravdu vážné...

--mudrd8mz
V odpovědi na František Pinc

Re: České řazení jmen

autor František Pinc -
Tak to zabralo. Nastavil jsem to na utf8_general_ci. Teď to běhá dobře.
V odpovědi na František Pinc

Re: České řazení jmen

autor František Pinc -
Ja nastavil utf8_general_ci jen u tabulek se statistikama, takže mi jména řadí správně.
Napadlo mě, že by to mohlo mít něco společného s datový typem enum, který je , pokud se nepletu, uložen jako číslo . Nikde jinde jsem datový typ enum v tabulkách neobjevil , takže je to hypotéza. Víc jsem o tom nebádal .
V odpovědi na František Pinc

Re: České řazení jmen

autor Petr Vilímek -
Takže některé tabulky máš utf8_general_ci a některé utf8_czech_ci?
Které tabulky máš utf8_czech_ci? Stačí to mít nastaveno jen v databázi nebo je třeba ještě i jiné nastavení někde jinde?
V odpovědi na František Pinc

Re: České řazení jmen

autor Petr Vilímek -
Super. Mám to. Stačilo změnit v tabulce mdl_user tabulku lastname na utf8_czech_ci a pěkně to řadí podle příjmení, tak jak má.