我正在尝试从 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粉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';
”
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?