群集中的aws aurora rds(mysql)无法插入表情符号
我正在集群中使用极光rds(mysql),无法插入表情符号。我尝试插入的列具有排序规则: utf8mb4-utf8mb4\u unicode\u ci 我尝试过使用客户端插入,也尝试过从mysql workbench编写查询,但在这两种情况下我都看到了????在野外 我已更新了表格默认字符集: utf8mb4 和默认排序规则: utf8mb4_unicode_ci 但还是得到了???而不是表情符号 编辑1:群集中的aws aurora rds(mysql)无法插入表情符号,mysql,amazon-web-services,emoji,amazon-aurora,Mysql,Amazon Web Services,Emoji,Amazon Aurora,我正在集群中使用极光rds(mysql),无法插入表情符号。我尝试插入的列具有排序规则: utf8mb4-utf8mb4\u unicode\u ci 我尝试过使用客户端插入,也尝试过从mysql workbench编写查询,但在这两种情况下我都看到了????在野外 我已更新了表格默认字符集: utf8mb4 和默认排序规则: utf8mb4_unicode_ci 但还是得到了???而不是表情符号 编辑1: 我已尝试编辑集群的参数组,并将所有字符集值设置为utf8mb4,将所有排序规则值设置为u
我已尝试编辑集群的参数组,并将所有字符集值设置为utf8mb4,将所有排序规则值设置为utf8mb4_unicode_ci,但仍不起作用。更改表的默认字符集不会改变任何现有列。您可以运行
SHOW CREATE TABLE MyTable
查看差异
例如,我们可以使用老式的字符集创建一个表:
mysql> create table MyTable (string1 varchar(100) ) default character set = latin1;
mysql> show create table MyTable\G
*************************** 1. row ***************************
Table: MyTable
Create Table: CREATE TABLE `MyTable` (
`string1` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
接下来,我们将更改表的默认值,但我们看到这不会更改列。现有列自动获得一个选项,显示它实际用于字符集的内容,因为它现在不同于表默认值:
mysql> alter table MyTable default charset = utf8mb4;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show create table MyTable\G
*************************** 1. row ***************************
Table: MyTable
Create Table: CREATE TABLE `MyTable` (
`string1` varchar(100) CHARACTER SET latin1 DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
默认值用于随后添加到表中的列:
mysql> alter table MyTable add column string2 varchar(100);
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show create table MyTable\G
*************************** 1. row ***************************
Table: MyTable
Create Table: CREATE TABLE `MyTable` (
`string1` varchar(100) CHARACTER SET latin1 DEFAULT NULL,
`string2` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
要转换现有列,请使用“转换为字符集”。这将重写表,并在需要时转换每列的现有数据:
mysql> alter table MyTable convert to character set utf8mb4;
Query OK, 0 rows affected (0.09 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show create table MyTable\G
*************************** 1. row ***************************
Table: MyTable
Create Table: CREATE TABLE `MyTable` (
`string1` varchar(100) DEFAULT NULL,
`string2` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
现在,两列都没有说明各自的字符集,因为它们与表的默认值相匹配。您的集群参数组应该设置以下选项:
- 字符集客户端:utf8mb4
- 字符集连接:utf8mb4
- 字符集数据库:utf8mb4
- 字符集服务器:utf8mb4
- 排序规则\u连接:utf8mb4\u unicode\u ci
- 排序规则\u服务器:utf8mb4\u unicode\u ci
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
如果在此之后运行显示变量,如“%collation%”
,您应该会看到三个具有正确排序规则的变量(utf8mb4\u unicode\u ci)
您还需要将表和列转换为正确的字符集和排序规则,这已经在DBA堆栈交换中得到了回答:这是有用的好信息。然而,就我而言,这并没有解决问题。使用上面的ALTERTABLE语句更改表的编码不允许我仍然输入表情符号。我得到了????用于表情符号条目。奇怪的是,有一些表情符号确实显示为表情符号,但大多数都被问号取代在客户端会话中,并确保应用程序支持utf8mb4,以便字符串从输入一直编码到数据库,根据你说的,我已经更新了包含RDS的集群的参数组,并设置了所有字符集和排序规则值,但仍然不起作用。我相信这与“设置名称utf8mb4”相同。我认为这可能是一个极光问题。我已经编辑了问题以反映我所做的工作。我已经设置了所有群集参数组选项。在init_connect下的instance参数组中,我之前将该值设置为set NAMES utf8mb4,但在阅读您的帖子后,更新为set NAMES utf8mb4 COLLATE utf8mb4\u unicode\u ci。重新启动,但仍不工作。我确信数据库中的表具有正确的字符集和排序规则。我不确定我还能尝试什么。至于像“%collation%”这样的SHOW变量,这是mysql的命令提示符语句吗?我试着在mysql工作台中显示类似“collation”的变量,结果显示了一个空的replykoay。终于开始工作了。必须在控制台中输入集合名称utf8mb4 COLLATE utf8mb4_unicode_ci,因为init_connect参数没有任何效果。不确定这是否是因为init_connect是在实例中定义的,而不是在集群中定义的,但无论如何都要感谢您的帮助。@alionsego很高兴听到这个消息!对我来说,有两个名为“default.aurora5.6”的参数组-只有类型为“DB cluster parameter group”的参数组在我进行更改后才具有这些选项。排序规则数据库仍然是拉丁语1瑞典语ci。我能做什么?