我正在尝试将我的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 |
+--------------------------+--------------------+
这是正确的,但由于某些原因,这些全局值在重新启动服务器时没有设置服务器。我可以在重新启动后手动正确设置变量,但我不明白为什么它们最初没有设置。
答案 0 :(得分:1)
修正了它。这是我本地安装MySQL的问题 - 而不是服务器。我不得不更改它发送的默认编码,并且从那里工作得很好。
答案 1 :(得分:1)
为了澄清Aaron的回答,这是(至少对我们来说)由我们的连接到数据库的字符集/整理引起的;数据库本身设置正确。当您使用任何客户端连接到数据库时 - 无论是SQLyog,MySQL Workbench,内置客户端还是其他任何客户端 - 都有与该连接相关联的字符集和排序规则。因此,您需要将此连接 charset / collation更改为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