【问题标题】:Failed to connect to MySQL: Server sent charset unknown to the client. Please, report to the developers - SamplePage.php连接 MySQL 失败:服务器向客户端发送未知字符集。请向开发人员报告 - SamplePage.php
【发布时间】:2020-11-08 23:34:28
【问题描述】:

由于某种原因,在我的 Chrome 浏览器上通过以下链接打开 SamplePage.php 时,我无法在 sample 数据库上创建 employeeTable

http://ec2-13-57-28-240.us-west-1.compute.amazonaws.com/SamplePage.php

我能够通过以下链接从 AWS 创建 EC2 实例并安装 Web 服务器教程:

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Tutorials.WebServerDB.CreateWebServer.html

我收到以下错误:

无法连接到 MySQL:服务器向客户端发送未知字符集。 请向开发人员报告。

根据我的阅读,AWS Linux AMI 映像默认具有 UTF-8 字符集,连接到我的 MySQL 数据库实例后,我在我的 EC2 实例上运行此命令得到输出:

SHOW VARIABLES LIKE 'char%';

  Variable_name            | Value                                     
|+--------------------------+-------------------------------------------+
| character_set_client     | utf8                                      |
| character_set_connection | utf8                                      |
| character_set_database   | utf8mb4                                   |
| character_set_filesystem | binary                                    |
| character_set_results    | utf8                                      |
| character_set_server     | utf8mb4                                   |
| character_set_system     | utf8                                      |
| character_sets_dir       | /rdsdbbin/mysql-8.0.17.R1/share/charsets/ |

我还将我的 Putty /.bash_profile 设置为使用 UTF-8 字符集,方法是将配置输入为:

export LC_CTYPE="en_US.UTF-8"

我不知道发生了什么,我相信,我遵循了有关如何创建数据库实例并从此链接链接到 EC2 实例的完整教程:

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/TUT_WebAppWithRDS.html

【问题讨论】:

  • 各种组件(客户端、服务器等)的版本是什么?您最近是否更改过云服务?
  • 我的客户端是 Windows 10。AWS EC2 实例是 Linux AMI 版本 1,数据库实例是 MySQL 8.0.17。这是我对任何云服务的第一次体验。
  • 我注意到 character_set_client、character_set_connection、charcter_set_results 和 character_set_system 是 utf8,而 character_set_database 和 character_set_server 是 utf8mb4。不知道这样有没有影响?
  • 我找到了一篇文章:dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.html>可能有用,但是我没有足够的经验来解释它,对不起。
  • 除非你特别需要“utf8mb3”,否则你应该使用“utf8mb4”。

标签: php mysql utf-8


【解决方案1】:

视情况而定。

您是否还没有将任何文本放入表格中,那么:

ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4;

如果表中有数据,大约有 3 种不同的方法可以更改字符集。提示在这里:
http://mysql.rjweb.org/doc.php/charcoll#fixes_for_various_cases

如果你有垃圾出来,那么看Trouble with UTF-8 characters; what I see is not what I stored

【讨论】:

  • 我尝试运行命令ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4;但得到以下错误:ERROR 1046 (3D000): No database selected
  • 我输入了USE sample; 然后我运行了ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4; 我得到了以下错误:ERROR 1146 (42S02): Table 'sample.t' doesn't exist。错误是正确的,表不存在。编写SamplePage.php 是为了创建employeeTable,但由于sample 数据库上的字符集不同(即UTF-8 与UTF8mb4 相比),我无法创建employeeTable。只想用employeeTable 创建sample 数据库,就像SamplePage.php 设计的那样。抱歉,我之前没说清楚。
  • 另外,是否可以将示例数据库更改为 utf-8 字符集而不是 utf8mb4?有命令可以改变吗?也许,这将解决字符集未知问题。
  • 通过运行SET NAMES 'utf8mb3'; 命令和set character_set_server ='utf8mb3'; 命令,我能够将character_set_servercharacter_set_database 设置为utf8mb3utf8,但我仍然得到errorFailed to connect to MySQL: Server sent charset unknown to the client. Please, report to the developers Error creating table. 也许,我必须对SamplePage.php 文件做一些事情才能使字符集正确。
  • 我将标题 header("Content-Type: text/html;charset=UTF-8"); 放入 SamplePage.php 中,但仍然出现相同的错误。我想我的想法已经用完了,除了再次创建数据库以查看是否遗漏了什么?
【解决方案2】:

原来所有这些关于更改字符集和确保数据库中的字符集设置正确的工作只是依赖于另一个问题,即 mysqli 扩展没有正确安装和启用。我还将 php 版本升级到 7.2,这也可能解决了这个问题,但我不完全确定。也许有人可以根据我所做的验证修复是什么?

【讨论】:

    【解决方案3】:

    我通过删除 php56 并改为安装 php72 解决了这个问题。以下是命令

    sudo yum -y remove php*

    sudo yum install php72

    sudo yum install php72-mysqlnd

    sudo apachectl restart

    【讨论】:

      【解决方案4】:

      要解决此问题,请删除 PHP 7.4 并替换为 7.2

      sudo yum -y remove php*
      sudo amazon-linux-extras disable php7.4
      sudo amazon-linux-extras enable php7.2
      yum clean metadata
      sudo yum install php php-{pear,cgi,common,curl,mbstring,gd,mysqlnd,gettext,bcmath,json,xml,fpm,intl,zip,imap}
      php -v
      sudo apachectl restart
      

      【讨论】:

        猜你喜欢
        • 2017-06-25
        • 2019-03-30
        • 2019-04-25
        • 2018-11-30
        相关资源
        最近更新 更多