Ich versuche, von Symfony 3-Anwendung aus eine Verbindung zu einer MySQL-Datenbank herzustellen. Beim Versuch, ein MySQL-Schema aus einem Symfony-Konsolenbefehl zu erstellen, erhalte ich folgende Fehlermeldung: PDO::__construct(): Server sent charset (255) unknown to the client. Please, report to the developers
Sowohl PHP als auch MySQL werden in Docker-Containern ausgeführt.
MySQL-Version: 8.0.1
PHP-Version: 7.1.3
Treiber: pdo_mysql
zeichensatz: UTF8
dsn: "mysql:Host=mysql;dbname=database;charset=UTF8;"
Irgendwelche Ideen?
MySQL 8 hat den Standardzeichensatz in utfmb4 geändert. Aber einige Kunden kennen diesen Zeichensatz nicht. Wenn der Server dem Client seinen Standardzeichensatz meldet und der Client nicht weiß, was der Server bedeutet, wird dieser Fehler ausgegeben.
Siehe auch https://bugs.mysql.com/bug.php?id=71606
Dieser Fehler ist gegen den MySQL Connector/C++ gerichtet und betrifft daher nicht nur PHP.
Okay - Ich habe es verstanden, indem ich den Zeichensatz in utf8 geändert habe, um mit nicht aktualisierten Clients kompatibel zu sein. Ich habe dies zu /etc/my.cnf hinzugefügt und mysqld neu gestartet:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
character-set-server = utf8
Ich habe diese Einstellungen in einer Antwort von 2010 gefunden: MySQL-Standardzeichensatz in UTF-8 in my.cnf ändern?
Die akzeptierte Antwort hat mich gerettet (danke, Bill !!!), aber ich bin auf ein anderes verwandtes Problem gestoßen, wollte nur ein paar Details zu meiner Erfahrung liefern -
Nach dem Upgrade auf MySQL 8.0.11 trat bei Verwendung der Funktion mysqli_connect()
von PHP dasselbe Problem wie beim OP auf. In meinem MySQL-Verzeichnis (in meinem Fall usr/local/mysql
) Habe ich die Datei my.cnf
Erstellt, den Inhalt der akzeptierten Antwort hinzugefügt und dann den MySQL-Server neu gestartet. Dies führte jedoch zu einem neuen Fehler:
mysqli_connect(): The server requested authentication method unknown to the client [caching_sha2_password]
Ich habe die Zeile default_authentication_plugin = mysql_native_password
Hinzugefügt, also sah my.cnf
Jetzt so aus:
[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
und ich war gut zu gehen!
Als zusätzliche Referenz: https://github.com/laradock/laradock/issues/1392
Ich hatte das gleiche Problem, also muss ich MySQL 8 mit einer anderen Authentifizierungsmethode neu installieren "Legacy-Authentifizierungsmethode verwenden (MySQL 5.x-Kompatibilität beibehalten)" und dann ordnungsgemäß arbeiten.
Wählen Sie während der Installation die zweite Authentifizierungsmethode.
Viel Glück!
Funktioniert für mich>
die Umgebung:
localhost
Windows 10
PHP 5.6.31
MYSQL 8
einstellen:
default-character-set=utf8
auf:
c:\programdata\mysql\mysql server 8.0\my.ini
C:\Program Files\MySQL\MySQL Server 5.5\my.ini
Tools, die helfen:
C:\Program Files\MySQL\MySQL Server 8.0\bin>mysql -u root -p
mysql> show variables like 'char%';
mysql> show variables like 'collation%';
\m/
suchen Sie den Abschnitt [MySQLi]
in Ihrem php.ini
und fügen Sie die Zeile mysqli.default_charset = "UTF-8"
hinzu. Ähnliche Änderungen können für den Abschnitt [Pdo_mysql]
und [mysqlnd]
erforderlich sein.
Das Problem scheint spezifisch mit MySQL Version 8.0 zu sein, und die vorstehende Lösung konnte mit PHP Version 7.2 arbeiten und die Lösung funktionierte nicht mit PHP 7.0
Ich habe dieses Problem gelöst, indem ich folgenden Code in meine Datei /etc/my.cnf eingefügt habe -
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
character-set-server = utf8
Nachdem ich das gespeichert hatte, ging ich in meine Systemeinstellungen und stoppte den MYSQL-Server und startete erneut, und es funktionierte.