Pro jednoho zákazníka jsem vytvořil redakční systém, který využívá pro ukládání textů MySQL. Jelikož se jednalo o web, kde je část textů v češtině, musel jsem nastudovat (už bylo na čase) problematiku kódování a řazení příspěvků v MySQL.
Všechno co zde bude popsáno by mělo fungovat od verze 4.1 MySQL pro tabulky MyISAM. U tabulek typu InnoDB je nutné mít verzi 4.1.2 nebo vyšší.
Nastavení znakové sady
Nastavení znakové sady se provádí pomocí příkazu SET CHARACTER SET. Např.: SET CHARACTER SET utf8 nastaví znakovou sadu dotazu i znakovou výsledku na UTF-8. Tento příkaz je důležité odeslat ihned po připojení k databázovému serveru. Další důležitý příkaz je SHOW CHARACTER SET, po jeho odeslání získáme seznam všech znakových sad, které server podporuje.
Podobného výsledku můžeme dosáhnout pomocí příkazu SET NAMES `utf8`, rozdíl je v tom, že takto nastavíme i znakovou sadu připojení k serveru.
Znakovou sadu je vhodné nastavit databázi a tabulkám již při jejich vytváření. Toho docílíme takto:
CREATE DATABASE jmeno_databaze DEFAULT CHARACTER SET utf8; CREATE TABLE pokus ( ID int(6) not null auto_increment primary key, Text Text) DEFAULT CHARACTER SET utf8;
Nastavení znakové sady výsledků SQL dotazu
Toto je velmi užitečná vlastnost, která může ušetřit dost práce. Nejčastěji ji používám, když potřebuji vyexportovat data z MySQL do Excelu.
Změna výstupního kódování je velmi jednoduchá: SET CHARACTER_SET_RESULTS = cp1250; a dostaneme data ve znakové sadě windows-1250.
Nastavení porovnávání
Porovnávání (angl. collation) je sada pravidel, které určují jak se budou řadit jednotlivé položky tabulky. Správné nastavení je důležité pokud chcete v databázi vyhledávat a potřebujete výsledky řadit podle české abecedy.
Seznam porovnávání dostupných na serveru zjistíte pomocí SQL příkazu SHOW COLLATION;. Seznam obvykle obsahuje velké množství položek, proto je dobré výběr omezit pomocí operátoru LIKE, např. SHOW COLLATION LIKE ‚utf8%‘;.
Porovnávání se určuje při vytváření databáze nebo tabulky. Samozřejmě ho lze později změnit pomocí příkazu ALTER.
CREATE DATABASE jmeno_databaze DEFAULT CHARACTER SET utf8 COLLATE utf8_czech_ci; CREATE TABLE pokus ( ID int(6) not null auto_increment primary key, Text Text) DEFAULT CHARACTER SET utf8 COLLATE utf8_czech_ci;