MySQL – kódování

Databázi není vždy zřejmé, jaké kódování na vašich stránkách používáte, proto je občas nutné dát databázi najevo, jak bude komunikace probíhat.

Nastavení databáze

Primárně je dobré nastavit kódování databáze, tabulek a jejich jednotlivých textových sloupců na to, které v naší aplikaci používáme. Nejlépe je samozřejmě vytvořit databázi a tabulky nové a nastavit atribut „Porovnávání„, který zaopatřuje kódování, ještě před jejich užíváním. Pokud jste tak neučinili, můžete zkusit změnit atributy již vytvořeným tabulkám. Dejte si však pozor. Data, která tabulky obsahují mohou být poškozena.

Nastavení kódování již existujících databází a tabulku provedeme přes phpMyAdmin kliknutím na jméno databáze (tabulky) a výběrem záložky úpravy v pravém horním menu. Poté vybereme v kolonce „Porovnávání“ příslušné kódování. U jednotlivých sloupečků tabulky uděláme totéž v jejich editaci.

Nastavení skriptu

Pokud se na stránkách zobrazují texty v chybném kódování, podstata problému spočívá v rozdílném kódování, které používá váš skript při komunikaci s MySQL a které je použito ve vašich stránkách. Výchozí kódování při spojení s naší MySQL databází je UTF-8, MySQL vám tedy vrací data v UTF-8 (bez ohledu na to, v jakém kódování jsou data uložena v databázi, protože se provádí jejich konverze na kódování).

Pokud vaše stránky používají kódování jiné (dle META hlavičky content-type), je potřeba PHP říci, že od MySQL chcete data v tom daném kódování.

Např. pokud vaše stránky publikujete v kódování ISO 8859-2 (neboli Latin2):

<head>
 <meta http-equiv="content-type" content="text/html; charset=iso-8859-2" />
 <title>ukázková hlavička</title>
</head>

Pak je nutné toto sdělit také PHP při komunikaci s MySQL. Činí se tam SQL příkazem SET NAMES. Například:

$link = mysql_connect("wm1.wedos.net", "user_test", "pass_test");
mysql_select_db("test_db", $link);
mysql_query("SET NAMES latin2");