2015-12-25 45 views
4

我试图将我的Amazon RDS服务器转换为使用utf8mb4编码而不是utf8。我遵循指南here,它已经在大部分工作(全局变量通过我在RDS中的新参数组来设置),但是我的系统变量设置不正确,这意味着我无法利用新的编码。Amazon RDS上的MySQL utf8mb4:全局变量设置正确,但未设置变量

当我运行:

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 | 
+--------------------------+--------------------+ 

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

回答

1

修正了它。这是我本地安装MySQL的一个问题 - 不是服务器。我不得不改变它发送的默认编码,并从那里运行。

+1

我现在有同样的麻烦。你能告诉我如何解决它? – ykensuke9

+0

@ ykensuke9在这里相同,请参阅我的回答澄清。 – KayakinKoder

1

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

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

该值将所有显示正常。如果你仔细看看原始问题中的“问题”值,你会发现它们是_client,_connection等,这应该给我一个明显的线索,说明问题出在我的mysql客户端上,而不是数据库本身。