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

时间:2015-12-25 22:36:53

标签: mysql amazon-rds

我正在尝试将我的Amazon RDS服务器转换为使用utf8mb4编码而不是utf8。我已经按照指南https://msdn.microsoft.com/en-us/library/windows/desktop/aa365203%28v=vs.85%29.aspx进行了大部分工作(全局变量是通过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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

为了澄清Aaron的回答,这是(至少对我们来说)由我们的连接到数据库的字符集/整理引起的;数据库本身设置正确。当您使用任何客户端连接到数据库时 - 无论是SQLyog,MySQL Workbench,内置客户端还是其他任何客户端 - 都有与该连接相关联的字符集和排序规则。因此,您需要将此连接 charset / collat​​ion更改为utf8mb4和utf8mb4_unicode_ci,以及

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

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

答案 2 :(得分: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