Veuillez signaler aux développeurs : PDO::__construct() : jeu de caractères envoyé par le serveur (255) non reconnu par le client.
P粉808697471
P粉808697471 2023-10-16 10:02:44
0
2
722

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粉808697471
P粉808697471

répondre à tous(2)
P粉364642019

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粉884548619

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 ?

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal