請向開發人員報告:PDO::__construct():伺服器發送的字元集(255)用戶端無法識別
P粉808697471
P粉808697471 2023-10-16 10:02:44
0
2
701

我正在嘗試從 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;"

有什麼想法嗎?

P粉808697471
P粉808697471

全部回覆(2)
P粉364642019

升級到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 現在看起來像:

[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

我很高興可以出發了!

更多參考:https://github.com/laradock/laradock/issues/1392

#請注意 ARA1307 的評論:

“請注意,您應該建立新用戶,例如:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

P粉884548619

MySQL 8 將預設字元集變更為 utf8mb4。但有些客戶不知道這個字符集。因此,當伺服器向客戶端報告其預設字元集,而客戶端不知道伺服器的含義時,就會拋出此錯誤。

另請參閱https://bugs.mysql.com/bug.php?id= 71606

該錯誤是針對 MySQL Connector/C 的,因此它影響的不只是 PHP。

正確的解決方案是升級客戶端,但與此同時,我透過將伺服器的字元集更改為 utf8 來使其正常工作,以與未升級的客戶端相容。我將其添加到 /etc/my.cnf 並重新啟動 mysqld:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8


[mysqld]
collation-server = utf8_unicode_ci
character-set-server = utf8

我在 2010 年的答案中找到了這些設定:將 my.cnf 中的 MySQL 預設字元集更改為 UTF-8?

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板