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?
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
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
Mám tam utf8_unicode_ci, takže chyba bude asi ještě někde jinde, že?
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
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
Ano, třeba řazení dle příjmení mi vyplivne toto:
Pelc Řeháček Rumanová Šeredová Šimaňok Smolíková
A písmeno CH to taky ignoruje:
Birtková Chmelařová Dostálová Hamalová
No jenže ono tam má být COLLATE utf8_czech_ci
Ha! Jak jsem to mohl přehlédnout?! Máš pravdu, Jiří, to bude ono
Ahá, to bude ono! Zrada.
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?
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 :
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......(???)
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......(???)
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]
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.
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.
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.
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 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!
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
O výkonnostních charakteristikách utf_czech _ci nevím nic, ale desetinásobné zpomalení je opravdu vážné...
--mudrd8mz
Tak to zabralo. Nastavil jsem to na utf8_general_ci. Teď to běhá dobře.
Běhá a řazení je v pořádku? Při utf8_general_ci mi neřadí jména správně:
Šafařík
Sivák
Surovec
Šafařík
Sivák
Surovec
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 .
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 .
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?
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?
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á.
Klepu na dřevo, Moodle mi po konverzi na české třídění (pro celý server) běhá stejně svižně jako předtím.