pdo::uu construct():服务器发送了客户端未知的字符集(255)请向开发商汇报

n6lpvg4x  于 2021-06-17  发布在  Mysql
关注(0)|答案(10)|浏览(253)

我正在尝试从symfony3应用程序连接到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 字符集: UTF8 dsn编号: "mysql:host=mysql;dbname=database;charset=UTF8;" 有什么想法吗?

r7knjye2

r7knjye21#

在测试mysql和相关php系统的还原备份时,我遇到了与此非常类似的问题。不管我在mysql上添加了什么配置设置,都没有任何区别。在解决这个问题一段时间后,我在mysql日志中注意到mysql配置文件在很大程度上被mysql忽略了。原因是文件权限太开放,这是因为我的zip备份和还原过程正在丢失所有文件权限。我修改了备份和恢复脚本,改用tar,然后一切正常。
总之,检查mysql配置文件的文件权限是否正确。希望这对别人有帮助。

zpf6vheq

zpf6vheq2#

mysql 8将默认字符集更改为utf8mb4。但有些客户不知道这个角色。因此,当服务器向客户机报告其默认字符集,而客户机不知道服务器的含义时,它抛出此错误。
另请参见https://bugs.mysql.com/bug.php?id=71606
这个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年的一个答案中发现了这些设置:在my.cnf中将mysql默认字符集更改为utf-8?

laik7k3q

laik7k3q3#

被接受的答案救了我(谢谢,比尔!!!),但我遇到了另一个相关的问题,只是想提供一些我的经验细节-
在升级到mysql 8.0.11之后,我在使用php的时候遇到了与op相同的问题 mysqli_connect() 功能。在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

tpgth1q7

tpgth1q74#

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

vql8enpb

vql8enpb5#

我也有这个问题。问题是因为我运行的是旧版本的php(5.6),一旦升级到php7.4,错误就消失了。
这是在amazon linux 2上为我准备的,升级命令是:
amazon linux extras安装php7.4
其他版本的*nix可能在其存储库中有它,否则如果您使用的是linux版本,那么remi可能会在这里为您提供它:https://rpms.remirepo.net/

drkbr07n

drkbr07n6#

查找节 [MySQLi] 在你的 php.ini 并添加行 mysqli.default_charset = "UTF-8" . 类似的变化,我需要的部分 [Pdo_mysql] 以及 [mysqlnd] .
问题似乎特别是MySQL8.0版,上面的解决方案发现与PHP7.2版兼容,而解决方案与PHP7.0不兼容

xggvc2p6

xggvc2p67#

适合我>
环境:

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/
raogr8fs

raogr8fs8#

我的案例是,我使用的是aws的rds(mysql db verion 8),并通过ec2连接我的应用程序(我的php代码5.6在ec2中)。
在这种情况下,由于是rds,因此没有my.cnf,参数由aws的参数组维护。参考:https://docs.aws.amazon.com/amazonrds/latest/userguide/user_workingwithparamgroups.html
所以我做的是:
创建新的参数组,然后对其进行编辑。
搜索了所有字符集参数。默认为空。分别编辑它们并从下拉列表中选择utf8。
字符集客户端、字符集连接、字符集数据库、字符集服务器
保存
最重要的是,重新启动rds示例。
这解决了我的问题,从php5.6到mysql 8.x的连接运行得很好。
希望这有帮助。
请查看此图像以便更好地理解。在此处输入图像描述

vmpqdwk3

vmpqdwk39#

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

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

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

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

t98cgbkg

t98cgbkg10#

我在连接本地系统时遇到了同样的问题。
我签入服务列表(run->services.msc->enter)wampmysqld64被停止。
重新启动它。并且可以登录。

相关问题