Existem dois conjuntos de caracteres diferentes em questão:
- a codificação na qual o MySQL assume que as strings são enviadas pelo cliente (
character_set_client
); e - a codificação na qual o MySQL enviará suas respostas (
character_set_results
).
Para verificar o valor atual dessas variáveis usando PDO, você pode buscar os resultados do
SHOW VARIABLES
declaração; por exemplo:$qry = $db->query("SHOW VARIABLES LIKE 'character_set_client'");
A documentação para
mysql_client_encoding()
é um tanto ambíguo, pois afirma:No entanto, não existe essa variável de sistema do servidor:então não tenho certeza de qual retornaria.
Por fim, em vez de definir um
MYSQL_ATTR_INIT_COMMAND
, você pode especificar o conjunto de caracteres desejado no DSN (como mencionado em o manual
):$db = new PDO("mysql:dbname=$db;host=$host;charset=$charset", $user, $password);