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

MySQL utf8mb4 on Amazon RDS: global variables set correctly but variables not set

我正在尝试将我的 Amazon RDS 服务器转换为使用 utf8mb4 编码而不是 utf8。我已经按照指南 here 进行了大部分工作(全局变量是通过我在 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 |
+--------------------------+--------------------+

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

已修复。这是我本地安装 MySQL 的问题 - 而不是服务器。我不得不更改它发送的默认编码,它从那里开始工作得很好。

为了澄清 Aaron 的回答,这是(至少对我们而言)由我们与数据库的 连接 的字符 set/collation 引起的;数据库本身设置正确。当您使用任何客户端连接到数据库时——无论是 SQLyog、MySQL Workbench、内置客户端还是任何其他客户端——都会有一个字符集和排序规则与之关联 连接。因此,您需要将此 connection charset/collation 更改为 utf8mb4 和 utf8mb4_unicode_ci,以及

的值
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

将全部正确显示。如果您仔细查看原始问题中的 "problem" 值,您会注意到它们是 _client、_connection 等,这应该给了我一个明显的线索,表明问题出在我的 mysql 客户端上,并且而不是数据库本身。

对我来说,这是因为我跳过了修改 /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