PDO::__construct():服务器发送了客户端未知的字符集 (255)。请向开发人员报告

我正试图从 Symfony 3 应用程序连接到 MySQL 数据库。但是,当我试图通过 Symfony 控制台命令创建 MySQL 模式时,却出现了以下错误:`PDO::__construct():服务器发送了客户端未知的字符集 (255)。请向开发人员报告

PHP 和 MySQL 都在 Docker 容器中运行。

MySQL 版本:`8.0.1

PHP 版本:`7.1.3

驱动程序: pdoo_mysql.

字符集: `UTF8UTF8

dsn: "mysql:host=mysql;dbname=database;charset=UTF8;"

有什么想法吗?

解决办法

MySQL 8 将默认字符集改为 utfmb4。但有些客户端不知道这种字符集。因此,当服务器向客户端报告其默认字符集,而客户端不知道服务器的意思时,就会抛出这个错误。

另请参阅 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 年的一个答案中找到了这些设置:https://stackoverflow.com/questions/3513773/change-mysql-default-character-set-to-utf-8-in-my-cnf

评论(7)

已接受的答案救了我(谢谢,比尔!!!),但我遇到了另一个相关问题,只想提供一些我的经验细节--

升级到 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

评论(3)

我在连接本地系统时也遇到了同样的问题。

我在服务列表(Run->Services.msc->Enter)中检查了 wampmysqld64 是否已停止。

重新启动后就可以登录了。

评论(0)