我正在嘗試從 Symfony 3 應用程式連接到 MySQL 資料庫。但是當嘗試從 Symfony 控制台命令建立 MySQL 模式時,我收到此錯誤: PDO::__construct(): 伺服器發送了客戶端未知的字元集 (255)。請向開發者報告
PHP 和 MySQL 都在 Docker 容器中運作。
MySQL版本:8.0.1
PHP版本:7.1.3
驅動程式:pdo_mysql
字元集:UTF8
dsn: "mysql:host=mysql;dbname=database;charset=UTF8;"
有什麼想法嗎?
升級到MySQL 8.0.11後,我在使用PHP的
mysqli_connect()
函數時遇到了與OP相同的問題。在我的MySQL 目錄(在我的例子中,usr/local/mysql
)中,我建立了my.cnf
文件,加入了接受的答案中的內容,然後重新啟動MySQL伺服器。然而,這產生了一個新的錯誤:mysqli_connect():伺服器請求客戶端未知的驗證方法 [caching_sha2_password]
#我新增了行
default_authentication_plugin = mysql_native_password
,所以my.cnf
現在看起來像:我很高興可以出發了!
更多參考:https://github.com/laradock/laradock/issues/1392
#請注意 ARA1307 的評論:
“請注意,您應該建立新用戶,例如:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
”MySQL 8 將預設字元集變更為 utf8mb4。但有些客戶不知道這個字符集。因此,當伺服器向客戶端報告其預設字元集,而客戶端不知道伺服器的含義時,就會拋出此錯誤。
另請參閱https://bugs.mysql.com/bug.php?id= 71606
該錯誤是針對 MySQL Connector/C 的,因此它影響的不只是 PHP。
正確的解決方案是升級客戶端,但與此同時,我透過將伺服器的字元集更改為 utf8 來使其正常工作,以與未升級的客戶端相容。我將其添加到 /etc/my.cnf 並重新啟動 mysqld:
我在 2010 年的答案中找到了這些設定:將 my.cnf 中的 MySQL 預設字元集更改為 UTF-8?