Deux jeux de caractères différents sont en cause :
- l'encodage dans lequel MySQL suppose que les chaînes sont envoyées par le client (
character_set_client
); et - l'encodage dans lequel MySQL enverra ses réponses (
character_set_results
).
Pour vérifier la valeur actuelle de ces variables à l'aide de PDO, vous pouvez récupérer les résultats du SHOW VARIABLES
déclaration; par exemple :
$qry = $db->query("SHOW VARIABLES LIKE 'character_set_client'");
La documentation pour mysql_client_encoding()
est quelque peu ambigu, car il indique :
Cependant, aucune variable système de ce type n'existe :je ne suis donc pas sûr de ce qu'elle renverrait.
Enfin, plutôt que de définir un MYSQL_ATTR_INIT_COMMAND
, vous pouvez spécifier le jeu de caractères souhaité dans le DSN (comme mentionné dans le manuel
):
$db = new PDO("mysql:dbname=$db;host=$host;charset=$charset", $user, $password);