Maison >développement back-end >tutoriel php >Pourquoi mon application Symfony 3 obtient-elle une erreur « PDO::__construct() : Le serveur a envoyé un jeu de caractères (255) inconnu au client » lors de la connexion à MySQL ?

Pourquoi mon application Symfony 3 obtient-elle une erreur « PDO::__construct() : Le serveur a envoyé un jeu de caractères (255) inconnu au client » lors de la connexion à MySQL ?

DDD
DDDoriginal
2024-12-18 15:57:09859parcourir

Why Does My Symfony 3 Application Get a

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn