V čem je problém
MySQL má ve svých nejnovějších verzích - tzn. 4.1 a výše - implementovanou novou vlastnost a to podporu různých znakových sad.
Je tedy potřeba patřičně upravit všechny skripty a programy, které pracují s takovouto databází. Zde narážíme na problém, kdy logicky nemůže být "program" (v případě Typo3 spíše sada skriptů) optimalizován pro obě varianty. Tím mám na mysli variantu MySQL s podporou znakových sad a bez.
Je tedy potřeba podniknou určité kroky v případě, že naše databáze je vyšší verze.
Další text bude popisovat postup v případě použití znakové sady utf-8. Pro jiné bude postup stejný, pouze se patřičně nahradí utf-8 za jinou.
Přichystání databáze
Při instalaci si Typo3 automaticky vytváří tabulky a může si i automaticky vytvořit databázi.
Je velmi podstatné, aby celá databáze i všechny její tabulky měly nastavéné kódování utf-8 a porovnávání utf8_general_ci.
Pokud to tak není, je asi nejjednodušší cesta:
- Udělat export celé databáze
- Všechny tabulky smazat
- Zkontrolovat, že je databáze nastavená na utf-8.
- Upravit exportovaný soubor tak, aby neobsahoval žádné definice nastavení charsetu (nejlépe nahrazením řetězce ve vašem oblíbeném editoru)
- Naimportovat databázi zpět
Všechny tabulky by teď měly být v požadovaném kódování.
Nastavení Typo3
Nyní je potřeba zajistit, aby Typo3 komunikovalo s databází v kódování utf-8.
Pro jistotu by bylo vhodné nastavit v konfiguraci parametr forceCharset na utf-8 (i když by to nemuselo být nutné). Tím zajistíme, že celé prostředí Typo3 bude v utf-8.
Aby i PHP komunikovalo s MySQL v utf-8, musíme po vytvoření spojení na databázi nastavit komunikaci v tomto charsetu. V dřívějších verzích Typo3 se toto muselo natvrdo zadat do zdrojového kódu třídy class.t3lib_db.php. Ve verzi 4.0 stačí opět v kofiguraci nastavit parametr (položku) setDBInit na tuto hodnotu:
SET NAMES utf8
SET CHARACTER SET utf8
SET character_set_results=utf8
SET character_set_connection=utf8
SET character_set_client=utf8
Dle různých návodu na internetu by měly stačit první dva řádky, ale mně se ověril tento postup.