PDO :: __ construct():服务器发送了客户端未知的charset(255)。请向开发人员报告

问题描述 投票:22回答:6

我正在尝试从Symfony 3应用程序连接到MySQL数据库。但是当尝试从Symfony控制台命令创建MySQL模式时,我收到此错误:PDO::__construct(): Server sent charset (255) unknown to the client. Please, report to the developers

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

MySQL版本:8.0.1

PHP版本:7.1.3

司机:pdo_mysql

charset:UTF8

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

有任何想法吗?

php mysql symfony pdo doctrine-orm
6个回答
62
投票

MySQL 8将默认字符集更改为utfmb4。但有些客户不知道这个字符集。因此,当服务器向客户端报告其默认字符集,并且客户端不知道服务器的含义时,它会抛出此错误。

另见https://bugs.mysql.com/bug.php?id=71606

这个bug是针对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年的答案中找到了这些设置:Change MySQL default character set to UTF-8 in my.cnf?


16
投票

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

升级到MySQL 8.0.11后,我在使用PHP的mysqli_connect()函数时遇到了与OP相同的问题。在我的MySQL目录(在我的例子中,usr/local/mysql)中,我创建了my.cnf文件,在接受的答案中添加了内容,然后重新启动了MySQL服务器。但是,这产生了一个新的错误:

mysqli_connect(): The server requested authentication method unknown to the client [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


4
投票

适合我>

环境:

localhost
Windows 10
PHP 5.6.31
MYSQL 8

组:

default-character-set=utf8

上:

c:\ programdata \ mysql \ mysql server 8.0 \ my.ini

  • 不适用于> C:\Program Files\MySQL\MySQL Server 5.5\my.ini

有用的工具:

C:\Program Files\MySQL\MySQL Server 8.0\bin>mysql -u root -p

mysql> show variables like 'char%';

mysql> show variables like 'collation%';

\m/

1
投票

我遇到了同样的问题所以我用不同的身份验证方法重新安装MySQL 8“使用传统身份验证方法(保留MySQL 5.x兼容性)”然后正常工作。

安装时选择第二种身份验证方法。

祝好运!


0
投票

在你的[MySQLi]找到部分php.ini并添加线mysqli.default_charset = "UTF-8"。类似的变化我需要的部分[Pdo_mysql][mysqlnd]

问题似乎特别适用于MySQL 8.0版,以上解决方案发现使用PHP V7.2,并且解决方案不适用于PHP 7.0


0
投票

我通过在我的/etc/my.cnf文件中添加以下代码解决了这个问题 -

enter image description here

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8


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

保存之后,我进入了我的系统设置并停止了MYSQL服务器并重新启动,它运行正常。


-2
投票

我有同样的问题连接到本地系统。

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

重新启动它。并且能够登录。

© www.soinside.com 2019 - 2024. All rights reserved.