Dilemme de jeu de caractères MySQL inconnu des PDO
Lorsque vous essayez de vous connecter à une base de données MySQL via une application Symfony 3, vous pouvez rencontrer l'erreur énigmatique message "PDO::__construct() : le serveur a envoyé un jeu de caractères (255) inconnu au client. Veuillez en informer les développeurs." Ce problème provient d'une inadéquation entre le jeu de caractères par défaut du serveur et la compréhension qu'en a le client.
Arrière-plan
MySQL version 8.0.1 a modifié son jeu de caractères par défaut en utf8mb4 . Cependant, certains clients restent ignorants de ce changement. Par conséquent, lorsque le serveur communique son jeu de caractères par défaut au client, une réponse non reconnue déclenche l'erreur susmentionnée.
Résolution
La solution optimale implique de mettre à niveau le client vers un version qui reconnaît utf8mb4. Cependant, à titre provisoire, vous pouvez modifier le jeu de caractères du serveur en utf8 pour prendre en charge les clients non mis à niveau. Ceci est réalisé en ajoutant les lignes suivantes à /etc/my.cnf :
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] collation-server = utf8_unicode_ci character-set-server = utf8
Solution alternative
Une autre solution potentielle consiste à définir de force le jeu de caractères de connexion MySQL. à une valeur spécifique. Dans votre chaîne de connexion PDO, vous pouvez utiliser le paramètre charset, tel que :
$dsn = "mysql:host=mysql;dbname=database;charset=utf8mb4;";
En définissant explicitement le jeu de caractères dans la chaîne de connexion PDO, vous pouvez contourner le jeu de caractères par défaut du serveur et garantir la compatibilité avec les deux mises à niveau. et les clients non mis à niveau.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!