問題となっている2つの異なる文字セットがあります:
- MySQLが文字列がクライアントによって送信されると想定するエンコーディング(
character_set_client
);および - MySQLが応答を送信するエンコーディング(
character_set_results
。
PDOを使用してこれらの変数の現在の値を確認するには、関連するSHOW VARIABLES
声明;例:
$qry = $db->query("SHOW VARIABLES LIKE 'character_set_client'");
mysql_client_encoding()
のドキュメント
それが述べているように、やや曖昧です:
ただし、そのようなサーバーシステム変数は存在しないため、どちらが返されるかはわかりません。
最後に、MYSQL_ATTR_INIT_COMMAND
を設定するのではなく 、DSNで目的の文字セットを指定できます(マニュアル
):
$db = new PDO("mysql:dbname=$db;host=$host;charset=$charset", $user, $password);