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

时间:2017-04-16 12:57:55

标签: php mysql symfony pdo doctrine-orm

我试图从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;"

有什么想法吗?

11 个答案:

答案 0 :(得分:52)

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

答案 1 :(得分:11)

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

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

答案 2 :(得分:2)

我也有这个问题。问题是因为我正在运行旧版本的PHP(5.6),并且一旦升级到PHP 7.4,错误就消失了。

这对我来说是在Amazon Linux 2上,升级命令是:

amazon-linux-extras安装php7.4

其他版本的* nix可能会将其存储在其存储库中,否则,如果您使用的是Linux版本,那么Remi可能会在这里为您提供它:https://rpms.remirepo.net/

答案 3 :(得分:1)

为我工作>

环境:

localhost
Windows 10
PHP 5.6.31
MYSQL 8

设置:

default-character-set=utf8

上:

  

c:\ programdata \ mysql \ mysql服务器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/

答案 4 :(得分:1)

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

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

祝你好运!

答案 5 :(得分:1)

我的情况是我正在使用AWS的RDS(mysql数据库版本8),并通过EC2连接我的应用程序(我的PHP代码5.6在EC2中)。

在这种情况下,因为它是RDS,所以没有my.cnf,该参数由AWS的PARAMETER Group维护。请参阅:https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html

所以我所做的是:

  1. 创建一个新的参数组,然后对其进行编辑。

  2. 搜索了所有字符集参数。默认情况下为空白。分别进行编辑,然后从下拉列表中选择utf8。

character_set_client, character_set_connection, character_set_database, character_set_server

  1. 保存

然后是最重要的是,重新启动RDS实例。

这解决了我的问题,并且从php5.6到mysql 8.x的连接运行良好。

希望这会有所帮助。

请查看此图片以更好地理解。 enter image description here

答案 6 :(得分:0)

[MySQLi]中找到php.ini部分,并添加第mysqli.default_charset = "UTF-8"行。我需要对[Pdo_mysql][mysqlnd]部分进行类似的更改。

问题似乎专门针对MySQL 8.0版,并且上述解决方案可用于PHP 7.2版,而解决方案不适用于PHP 7.0

答案 7 :(得分: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服务器,然后再次启动,它开始工作了。

答案 8 :(得分:0)

在测试mysql和相关的php系统的还原备份时,我有一个与此非常相似的问题。无论我在mysql上添加了什么配置设置,都没有任何区别。解决问题一段时间后,我在mysql日志中注意到mysql很大程度上忽略了mysql配置文件。原因是由于文件权限太开放,这是由于我的zip备份和还原过程丢失了所有文件权限。我修改了备份和还原脚本,改用tar,然后一切正常进行。

总而言之,检查mysql配置文件上的文件权限是否正确。希望这对某人有帮助。

答案 9 :(得分:0)

在我的 Aws Windows 中我解决了它 和步骤是

  1. 打开“C:\ProgramData\MySQL\MySQL Server 8.0”
  2. 打开我的.ini
  3. 找到“[mysql]”
  4. 在“no-beep="刹车线后插入“default-character-set=utf8”
  5. 找到“[mysqld]”
  6. 插入“collat​​ion-server = utf8_unicode_ci”
  7. 插入“character-set-server = utf8”

示例

#2

mysql screenshot

答案 10 :(得分:-2)

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

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

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