Ich versuche, von einer Symfony 3-Anwendung aus eine Verbindung zu einer MySQL-Datenbank herzustellen. Aber wenn ich versuche, ein MySQL-Schema über den Symfony-Konsolenbefehl zu erstellen, erhalte ich diese Fehlermeldung: PDO::__construct(): 服務(wù)器發(fā)送了客戶端未知的字符集 (255)。請(qǐng)向開發(fā)者報(bào)告
PHP und MySQL laufen beide in Docker-Containern.
MySQL-Version: 8.0.1
PHP-Version: 7.1.3
Fahrer:pdo_mysql
Zeichensatz:UTF8
dsn: "mysql:host=mysql;dbname=database;charset=UTF8;"
Irgendwelche Ideen?
升級(jí)到MySQL 8.0.11后,我在使用PHP的mysqli_connect()
函數(shù)時(shí)遇到了與OP相同的問題。在我的 MySQL 目錄(在我的例子中,usr/local/mysql
)中,我創(chuàng)建了 my.cnf
文件,添加了接受的答案中的內(nèi)容,然后重新啟動(dòng) MySQL服務(wù)器。然而,這產(chǎn)生了一個(gè)新的錯(cuò)誤:
mysqli_connect():服務(wù)器請(qǐng)求客戶端未知的身份驗(yàn)證方法 [caching_sha2_password]
我添加了行 default_authentication_plugin = mysql_native_password
,所以 my.cnf
現(xiàn)在看起來像:
[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
我很高興可以出發(fā)了!
更多參考:https://github.com/laradock/laradock/issues/1392
請(qǐng)注意 ARA1307 的評(píng)論:
“請(qǐng)注意,您應(yīng)該創(chuàng)建新用戶并明確指定“IDENTIFIED WITH mysql_native_password”,并更改現(xiàn)有用戶,例如:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
”
MySQL 8 將默認(rèn)字符集更改為 utf8mb4。但有些客戶不知道這個(gè)字符集。因此,當(dāng)服務(wù)器向客戶端報(bào)告其默認(rèn)字符集,而客戶端不知道服務(wù)器的含義時(shí),就會(huì)拋出此錯(cuò)誤。
另請(qǐng)參閱https://bugs.mysql.com/bug.php?id= 71606
該錯(cuò)誤是針對(duì) MySQL Connector/C++ 的,因此它影響的不僅僅是 PHP。
正確的解決方案是升級(jí)客戶端,但與此同時(shí),我通過將服務(wù)器的字符集更改為 utf8 來使其正常工作,以與未升級(jí)的客戶端兼容。我將其添加到 /etc/my.cnf 并重新啟動(dòng) mysqld:
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] collation-server = utf8_unicode_ci character-set-server = utf8
我在 2010 年的答案中找到了這些設(shè)置:將 my.cnf 中的 MySQL 默認(rèn)字符集更改為 UTF-8?