亚马逊RDS上的MySQL utf8mb4:全局变量正确设置但未设置变量

6
我正在尝试将我的Amazon RDS服务器从utf8编码转换为utf8mb4编码。我已经按照这里的指南进行了操作,大部分情况下都成功了(全局变量通过我的新参数组在RDS中设置),但是我的系统变量没有正确设置,这意味着我无法使用新的编码。
当我运行以下命令时:
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

我明白了:

+--------------------------+--------------------+
| 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               |
| collation_connection     | utf8_general_ci    |
| collation_database       | utf8mb4_unicode_ci |
| collation_server         | utf8mb4_unicode_ci |
+--------------------------+--------------------+

显然是不正确的,但是当我运行时:
SHOW GLOBAL VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

我明白:

+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+
| character_set_client     | utf8mb4            |
| character_set_connection | utf8mb4            |
| character_set_database   | utf8mb4            |
| character_set_filesystem | binary             |
| character_set_results    | utf8mb4            |
| character_set_server     | utf8mb4            |
| character_set_system     | utf8               |
| collation_connection     | utf8mb4_unicode_ci |
| collation_database       | utf8mb4_unicode_ci |
| collation_server         | utf8mb4_unicode_ci |
+--------------------------+--------------------+

这是正确的,但出于某种原因,当我重新启动服务器时,这些全局变量并未设置。我可以在重启后手动正确地设置变量,但我不明白为什么它们最初没有设置。

3个回答

3
为了澄清Aaron的回答,这个问题(至少对我们来说)是由于我们与数据库的连接的字符集/排序引起的;数据库本身被正确设置。当你使用任何客户端连接到数据库时,无论是SQLyog、MySQL Workbench、内置客户端还是其他任何客户端,都会有一个与该连接相关联的字符集和排序。因此,你需要将这个连接的字符集/排序更改为utf8mb4和utf8mb4_unicode_ci,并且修改值。
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

那么所有内容都会正确显示。如果您仔细查看原始问题中的“问题”值,您会注意到它们是_client、_connection等,这应该让我明显地意识到问题出在我的 mysql 客户端上,而不是数据库本身。


1

问题已经解决。这是由于我的本地MySQL安装出现了问题,而不是服务器的问题。我必须更改它发送的默认编码,然后从那里就可以很好地工作了。


1
我现在也遇到了同样的问题。你能告诉我怎么解决吗? - ykensuke9
@ykensuke9 我也一样,可以看看我的回答以进行澄清。 - KayakinKoder

0
对我来说,这是因为我跳过了修改 /etc/my.cnf 的指示(在原链接指南中)。
[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接