在AWS RDS上将MySQL服务器变量collat​​ion_connection设置为utf8_unicode_ci

时间:2016-03-11 03:11:58

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

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

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

我已在RDS的参数组中将collation_connection variable设置为utf8_unicode_ciThis is how I set the variable in the parameter group

然后我重新启动了我的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

4 个答案:

答案 0 :(得分:1)

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

my-component

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

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:-1)

In the Parameter group, set the variable init_connect to

SET COLLATION_CONNECTION=utf8_unicode_ci

答案 3 :(得分:-2)

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

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

而且,如果你正在做html页面,他们需要从

开始
<meta charset=UTF-8>

只要你正在进行这项练习,你应该一路走下去,这样你就可以处理所有中文和表情符号:utf8mb4utf8mb4_unicode_520_ci