在 AWS RDS 上将 MySQL 服务器变量 collation_connection 设置为 utf8_unicode_ci

问题描述 投票:0回答:5

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

utf8
utf8_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

mysql amazon-web-services utf-8 collation amazon-rds
5个回答
7
投票

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

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

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

SET collation_connection = 'utf8_unicode_ci';

3
投票

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

问题是MySQL客户端允许用户设置字符集(

default-character-set
),但不允许设置排序规则。如果需要特定的排序规则,则无法直接解决此问题。

在这种情况下,可以做的(除了运行时更改之外)是将服务器

character-set-client-handshake
变量设置为关闭 (
0
)。 这将跳过与客户端的字符集(以及隐式的排序规则)协商,并将服务器字符集/排序规则设置强加于任何客户端连接。


0
投票

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

设置 COLLATION_CONNECTION=utf8_unicode_ci


0
投票

我做到了 -

/etc/mysql/mariadb.conf.d/50-server.cnf

中规定
character-set-client-handshake = FALSE

我不知道/不明白这两个参数(—skip ... 和 FALSE)有多相同,但如果它们相同,那么在官方文档中会这样写

Don't ignore client side character set value sent during handshake. (Defaults to on; use --skip-character-set-client-handshake to disable.)

另外在文档中,我没有找到任何有关该值的内容

  • 错误

但它有效。


-4
投票

如果您有任何具有不同

CHARACTER SET
COLLATION
的现有表格,则它们需要转换;参见
ALTER TABLE ... CONVERT TO ...

如果您的代码未按

utf8
连接,则需要更改。细节是非常特定于语言的(Java vs PHP vs ...)。

并且,如果您正在制作 html 页面,则需要从

开始
<meta charset=UTF-8>

只要你在做这个练习,你就应该一直做下去,这样你就可以处理所有的中文和表情符号:

utf8mb4
utf8mb4_unicode_520_ci

© www.soinside.com 2019 - 2024. All rights reserved.