web-dev-qa-db-fra.com

PDO :: __ construct (): le jeu de caractères envoyé par le serveur (255) est inconnu du client. S'il vous plaît, rapportez aux développeurs

J'essaie de me connecter à une base de données MySQL à partir de l'application Symfony 3. Mais lorsque j'essaie de créer un schéma MySQL à partir d'une commande de la console Symfony, l'erreur suivante apparaît: PDO::__construct(): Server sent charset (255) unknown to the client. Please, report to the developers

PHP et MySQL s'exécutent tous deux dans des conteneurs Docker.

Version de MySQL: 8.0.1

Version PHP: 7.1.3

Pilote: pdo_mysql

jeu de caractères: UTF8

dsn: "mysql:Host=mysql;dbname=database;charset=UTF8;"

Des idées?

17
Napas

MySQL 8 a modifié le jeu de caractères par défaut en utfmb4. Mais certains clients ne connaissent pas ce jeu de caractères. Par conséquent, lorsque le serveur signale son jeu de caractères par défaut au client et que celui-ci ne sait pas ce que le serveur signifie, il renvoie cette erreur.

Voir aussi https://bugs.mysql.com/bug.php?id=71606

Ce bogue concerne le connecteur MySQL/C++ et n’affecte donc pas que PHP.

D'accord, j'ai réussi à changer le jeu de caractères en utf8 pour qu'il soit compatible avec les clients non mis à niveau. J'ai ajouté ceci à /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 une réponse de 2010: Changer le jeu de caractères par défaut de MySQL en UTF-8 dans my.cnf?

43
Bill Karwin

Travaille pour moi>

l'environnement:

localhost
Windows 10
PHP 5.6.31
MYSQL 8

ensemble:

default-character-set=utf8

sur:

c:\programdata\mysql\serveur mysql 8.0\my.ini

  • Ne fonctionne pas sur> C:\Program Files\MySQL\MySQL Server 5.5\my.ini

Des outils qui aident:

C:\Program Files\MySQL\MySQL Server 8.0\bin>mysql -u root -p

mysql> show variables like 'char%';

mysql> show variables like 'collation%';

\m/
0
reyqueson

trouvez la section [MySQLi] dans votre php.ini et ajoutez la ligne mysqli.default_charset = "UTF-8". Des modifications similaires sont requises pour les sections [Pdo_mysql] et [mysqlnd].

Le problème semble concerner spécifiquement la version 8.0 de MySQL, et la solution ci-dessus semble fonctionner avec la version 7.2 de PHP et la solution ne fonctionne pas avec la version PHP 7.0.

0
user7154703