群集中的aws aurora rds(mysql)无法插入表情符号

pprl5pva  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(366)

我正在集群中使用aurora rds(mysql),无法插入emoji的。我要插入的列具有排序规则:
utf8mb4-utf8mb4\u unicode\u ci
我尝试过使用客户机和mysql工作台来插入查询,但是在这两种情况下我都看到了????在田野里。
我已经更新了表的默认字符集:utf8mb4和默认排序规则:utf8mb4\u unicode\u ci
但还是得到了???而不是表情符号
编辑1:
我试图编辑集群的参数组,并将所有字符集值设置为utf8mb4,将所有排序规则值设置为utf8mb4\u unicode\u ci,但仍然不起作用。

4urapxun

4urapxun1#

更改表的默认字符集不会更改任何现有列。你可以跑了 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

现在两个列都没有说明各自的字符集,因为它们与表的默认值匹配。

ha5z0ras

ha5z0ras2#

群集参数组应设置以下选项:
字符集\客户端:utf8mb4
字符集\连接:utf8mb4
字符集数据库:utf8mb4
字符集服务器:utf8mb4
排序规则\u连接:utf8mb4 \u unicode \u ci
排序规则\u服务器:utf8mb4 \u unicode \u ci
可能需要在更新后重新启动示例。连接到群集时,需要为连接设置正确的排序规则,如下所示:

SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;

如果你跑了 SHOW VARIABLES LIKE "%collation%" 在此之后,您将看到三个变量都具有正确的排序规则(utf8mb4\u unicode\u ci)。
您还需要将表和列转换为正确的字符集和排序规则,这在dba stack exchange上已经得到了回答:如何在mysql 5.5中轻松地将utf8表转换为utf8mb4

相关问题