【问题标题】:Set MySQL server variable collation_connection to utf8_unicode_ci on AWS RDS在 AWS RDS 上将 MySQL 服务器变量 collat​​ion_connection 设置为 utf8_unicode_ci
【发布时间】:2016-03-11 03:11:58
【问题描述】:

所以我的目标是将所有字符集和排序规则设置为utf8utf8_unicode_ci

我使用 AWS RDS 来托管 MySQL 服务器。

我在 RDS 的参数组中将 collation_connection variable 设置为 utf8_unicode_ci .

然后我重新启动了我的 RDS,当转到 MySQL 控制台时,它会显示以下变量值。

mysql> show variables like "%character%";show variables like "%collation%";
+--------------------------+-------------------------------------------+
| Variable_name            | Value                                     |
+--------------------------+-------------------------------------------+
| character_set_client     | utf8                                      |
| character_set_connection | utf8                                      |
| character_set_database   | utf8                                      |
| character_set_filesystem | binary                                    |
| character_set_results    | utf8                                      |
| character_set_server     | utf8                                      |
| character_set_system     | utf8                                      |
| character_sets_dir       | /rdsdbbin/mysql-5.6.22.R1/share/charsets/ |
+--------------------------+-------------------------------------------+
8 rows in set (0.01 sec)

+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+

我不确定为什么 collation_connection 设置为 utf8_general_ci

【问题讨论】:

  • 将表更改为一般确实解决了我遇到的问题(关于我的更新不起作用 - web-technology-experts-notes.in/2014/07/… 但我仍然不知道为什么 collat​​ion_connection 没有改变。
  • 您最终解决了这个问题吗?因为我也面临与 Amazon RDS 参数组相同的情况。
  • 不,仍然对潜在的解决方案感兴趣
  • 我也有同样的问题,希望有解决方案
  • 我写了一个解决方案的答案。我想这个问题现在会更频繁地出现,因为 MySQL 8.0 已经改变了默认的 utf8mb4 排序规则。

标签: mysql amazon-web-services utf-8 collation amazon-rds


【解决方案1】:

在参数组中,将变量 init_connect 设置为

SET COLLATION_CONNECTION=utf8_unicode_ci

【讨论】:

【解决方案2】:

collation_connection 变量由客户端设置;客户端可以使用不同的设置进行编译 - 在这种情况下,utf8 的默认排序规则似乎是 utf8_general_ci

问题在于 MySQL 客户端允许用户设置字符集 (default-character-set),但不允许设置排序规则。如果需要特定的排序规则,则无法直接解决。

在这种情况下,可以做的(除了运行时更改)是将服务器character-set-client-handshake 变量设置为关闭(0)。 这将跳过与客户端的字符集(以及隐含的排序规则)协商,并将服务器字符集/排序规则设置强加于任何客户端连接。

【讨论】:

  • 遇到了同样的问题,这是正确的答案。正好解决问题。
【解决方案3】:

您在此处看到的变量是当前客户端会话的变量:

+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+

因此,当您启动连接时,您需要在要连接的客户端上运行以下命令:

SET collation_connection = 'utf8_unicode_ci';

【讨论】:

    【解决方案4】:

    如果您有任何具有不同CHARACTER SETCOLLATION 的现有表,则需要对其进行转换;见ALTER TABLE ... CONVERT TO ...

    如果您的代码未连接为 utf8,则需要更改。细节是非常特定于语言的(Java vs PHP vs ...)。

    而且,如果你在做 html 页面,它们需要以

    开头
    <meta charset=UTF-8>
    

    只要你在做这个练习,你应该一路走下去,这样你就可以处理所有的中文和Emoji:utf8mb4utf8mb4_unicode_520_ci

    【讨论】:

    • 谢谢,但是你知道为什么 collat​​ion_connection 仍然设置为 utf8_general_ci 吗? (即使我在参数组中将 collat​​ion_connection 变量设置为 utf8_unicode_ci)。
    • 对不起,我对“参数组”不熟悉;我什至不知道这是什么产品。 第三方包太多,对 MySQL 的价值太低
    猜你喜欢
    • 2017-09-17
    • 2017-01-19
    • 2021-05-07
    • 2014-02-25
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多