it-swarm.com.de

PDO :: __ construct (): Der Server hat einen Zeichensatz (255) gesendet, der dem Client nicht bekannt ist. Bitte melden Sie sich bei den Entwicklern

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?

17
Napas

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?

43
Bill Karwin

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

16
skwidbreth

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!

1
npsingh

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

  • Funktioniert nicht bei> 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/
0
reyqueson

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

0
user7154703

Ich habe dieses Problem gelöst, indem ich folgenden Code in meine Datei /etc/my.cnf eingefügt habe -

enter image description here

[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.

0
hardik chugh