TIP: Nastavení MySQL pro češtinou a UTF-8
Víte, že se v MySQL dá jednoduše vyhledávat i bez diakritiky? Bohužel nestačí jen správné nastavení znakové sady a collate u tabulky. U češtiny to chce ještě menší trik. Ale podívejme se na to od začátku…
Základem je mít správné nastavení znakové sady a collate u tabulek/sloupců. Pro znakovou sadu UTF-8 a češtinu toho při vytváření tabulky dosáhneme následovně:
…
`czech_text` varchar(255) collate utf8_czech_ci NOT NULL,
…
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
Dalším krokem je mít správně nastavené proměnné spojení. MySQL server nemusí být nakonfigurován úplně podle vašeho očekávání, a tak není na škodu si po navázání spojení tyto proměnné nastavit (vyhnete se tím možným problémům při importu/exportu dat z/do jiných zdrojů).: SET NAMES 'utf8' COLLATE 'utf8_czech_ci'; Nyní by na takovéto tabulce v tomto spojení řazení probíhalo dle českých pravidel pro řazení. To znamená, že jakékoli výpisy budou správně česky seřazeny, což je samozřejmě žádoucí.
Toto nastavení má však jeden neblahý účinek na vyhledávání bez diakritiky. Jelikož jsou v češtině písmena č/ř/š/ž řazena až za c/r/s/z, znamená to, že ani dotaz SELECT * FROM `czech_table` WHERE `czech_text` LIKE '%c%';
nenajde slova obsahující č. To je jistě nežádoucí, neboť lidé si poměrně zvykli zadávat své dotazy pro vyhledávání bez diakritiky. Naštěstí jde vše napravit nastavením collate přímo u vyhledávacího dotazu:
WHERE `czech_text` COLLATE utf8_general_ci LIKE '%c%';
Takovýto dotaz pak najde i slova obsahující č.
Funkčnost takovéhoto vyhledávání si můžete vyzkoušet třeba hned na těchto stránkách.