Jen bych rád poskytl nějaké další podrobnosti o řešení navrženém vartec což je (v závislosti na vaší instalaci MySQL) nejsprávnější řešení vašeho problému. Zaprvé problém znakové sady / kódování v MySQL je poněkud komplexní téma, které je rozsáhle zahrnuto v příručce MySQL Kapitola 9.1 „Podpora znakové sady“ . Ve vašem případě zejména 9.1.4. "Připojení znakových sad a řazení" bude nejrelevantnější.
Abych to zkrátil:MySQL musí vědět, kterou znakovou sadu / kódování vaše klientská aplikace (mluvení z persoektivy databáze, kterou je váš skript PHP) očekává, protože překóduje všechna data řetězce z interní znakové sady / kódování definovaného na serveru, na úrovni databáze, tabulky nebo sloupce do znakové sady / kódování připojení. Na straně klienta používáte UTF-8, takže musíte MySQL sdělit, že používáte UTF-8. To se provádí příkazem MySQL SET NAMES 'utf8'
který musí být odeslán jako první dotaz při otevírání spojení. V závislosti na vaší instalaci a na klientské knihovně MySQL, kterou používáte ve skriptu PHP, to lze provést automaticky při každém připojení.
Pokud používáte PDO, je to jen otázka nastavení konfiguračního parametru
$db = new PDO($dsn, $user, $password);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
Pomocí mysqli je změna klientské znakové sady / kódování ještě jednodušší:
$mysqli = new mysqli("localhost", "user", "password", "db");
$mysqli->set_charset("utf8");
Doufám, že to pomůže k tomu, aby byla celá věc srozumitelnější.