Problémem jsou dvě různé znakové sady:
- kódování, ve kterém MySQL předpokládá, že řetězce jsou odesílány klientem (
character_set_client
); a - kódování, ve kterém bude MySQL posílat své odpovědi (
character_set_results
).
Chcete-li zjistit aktuální hodnotu těchto proměnných pomocí PDO, můžete načíst výsledky příslušného SHOW VARIABLES
."
tvrzení; například:
$qry = $db->query("SHOW VARIABLES LIKE 'character_set_client'");
Dokumentace pro mysql_client_encoding()
je poněkud nejednoznačné, jak uvádí:
Žádná taková systémová proměnná serveru však neexistuje:takže si nejsem jistý, která by se vrátila.
A konečně, místo nastavení MYSQL_ATTR_INIT_COMMAND
, můžete zadat požadovanou znakovou sadu v DSN (jak je uvedeno v manuál
):
$db = new PDO("mysql:dbname=$db;host=$host;charset=$charset", $user, $password);