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

Php PDO::_construct():服务器发送了客户端未知的字符集(255)。请向开发商报告,php,mysql,pdo,Php,Mysql,Pdo,我正在尝试从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;” 有什么想法吗?M

我正在尝试从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将默认字符集更改为utf8mb4。但有些客户不知道这个字符集。因此,当服务器向客户机报告其默认字符集,而客户机不知道服务器的意思时,就会抛出此错误

另见

这个bug是针对MySQL连接器/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年的回答中发现了这些设置:

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

另见

这个bug是针对MySQL连接器/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年的答案中发现了这些设置:

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

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

mysqli\u connect():服务器请求的身份验证方法客户端未知[缓存\u sha2\u密码]

我添加了行
default\u authentication\u plugin=mysql\u native\u 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
我很乐意去


作为补充参考:

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

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

mysqli\u connect():服务器请求的身份验证方法客户端未知[缓存\u sha2\u密码]

我添加了行
default\u authentication\u plugin=mysql\u native\u 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
我很乐意去


作为补充参考:

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

我签入服务列表(Run->services.msc->Enter)wampmysqld64已停止


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

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

我签入服务列表(Run->services.msc->Enter)wampmysqld64已停止


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

在您的
php.ini
中查找节
[MySQLi]
,并添加行
MySQLi.default\u charset=“UTF-8”
。我需要对
[Pdo_mysql]
[mysqlnd]
进行类似的更改


问题似乎特别是MySQL 8.0版和以上版本的解决方案与PHP 7.2版兼容,而解决方案与PHP 7.0不兼容,请在
PHP.ini
中查找section
[MySQLi]
,并添加行
MySQLi.default\u charset=“UTF-8”
。我需要对
[Pdo_mysql]
[mysqlnd]
进行类似的更改

问题似乎特别是MySQL版本8.0,上面的解决方案发现与PHP版本7.2兼容,而解决方案与PHP 7.0不兼容

对我有效>

环境:

localhost
Windows 10
PHP 5.6.31
MYSQL 8
设置:

关于:

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/
为我工作>

环境:

localhost
Windows 10
PHP 5.6.31
MYSQL 8
设置:

关于:

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/

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


保存之后,我进入我的系统设置,停止MYSQL服务器并重新启动,它成功了

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


保存之后,我进入我的系统设置,停止MYSQL服务器并重新启动,它成功了

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


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

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

选择第二种身份验证方法