首页  >  问答  >  正文

请向开发人员报告:PDO::__construct():服务器发送的字符集(255)客户端无法识别

我正在尝试从 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粉808697471P粉808697471339 天前570

全部回复(2)我来回复

  • P粉364642019

    P粉3646420192023-10-17 09:06:36

    升级到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 的评论:

    “请注意,您应该创建新用户并明确指定“IDENTIFIED WITH mysql_native_password”,并更改现有用户,例如:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

    回复
    0
  • P粉884548619

    P粉8845486192023-10-17 00:27:36

    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?

    回复
    0
  • 取消回复