Maison > Questions et réponses > le corps du texte
J'essaie de me connecter à une base de données MySQL depuis une application Symfony 3. Mais lorsque j'essaie de créer un schéma MySQL à partir de la commande de la console Symfony, j'obtiens cette erreur : PDO::__construct(): 服务器发送了客户端未知的字符集 (255)。请向开发者报告
PHP et MySQL fonctionnent tous deux dans des conteneurs Docker.
Version MySQL : 8.0.1
Version PHP : 7.1.3
Pilote :pdo_mysql
Ensemble de personnages :UTF8
dsn : "mysql:host=mysql;dbname=database;charset=UTF8;"
Des idées ?
P粉3646420192023-10-17 09:06:36
Après la mise à niveau vers MySQL 8.0.11, j'utilisais le fichier mysqli_connect()
函数时遇到了与OP相同的问题。在我的 MySQL 目录(在我的例子中,usr/local/mysql
)中,我创建了 my.cnf
de PHP, j'ai ajouté le contenu de la réponse acceptée et j'ai redémarré le serveur MySQL. Cependant, cela a généré une nouvelle erreur :
mysqli_connect():服务器请求客户端未知的身份验证方法 [caching_sha2_password]
J'ai ajouté la ligne default_authentication_plugin = mysql_native_password
,所以 my.cnf
et maintenant cela ressemble à :
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] collation-server = utf8_unicode_ci character-set-server = utf8 default_authentication_plugin = mysql_native_password
J'ai tellement hâte d'y aller !
Plus de références : https://github.com/laradock/laradock/issues/1392
Veuillez noter le commentaire d'ARA1307 :
"Veuillez noter que vous devez créer de nouveaux utilisateurs et spécifier explicitement "IDENTIFIÉ AVEC mysql_native_password", et modifier les utilisateurs existants, par exemple : ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
"
P粉8845486192023-10-17 00:27:36
MySQL 8 modifie le jeu de caractères par défaut en utf8mb4. Mais certains clients ne connaissent pas ce jeu de caractères. Ainsi, cette erreur est générée lorsque le serveur signale son jeu de caractères par défaut au client et que celui-ci ne sait pas ce que signifie le serveur.
Voir aussi https://bugs.mysql.com/bug.php?id= 71606
Ce bug est spécifique à MySQL Connector/C++, il n'affecte donc pas seulement PHP.
La bonne solution est de mettre à niveau le client , mais en attendant, je l'ai fait fonctionner en changeant le jeu de caractères du serveur en utf8 pour être compatible avec les clients non mis à niveau. Je l'ai ajouté à /etc/my.cnf et j'ai redémarré mysqld :
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] collation-server = utf8_unicode_ci character-set-server = utf8
J'ai trouvé ces paramètres dans cette réponse de 2010 : Changer le jeu de caractères par défaut de MySQL dans my.cnf en UTF-8 ?