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?
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?
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
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/
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.