[英]AWS RDS Aurora MySQL Cluster, Reader Replica shows no connections
[英]aws aurora rds (mysql) in a cluster cannot insert emoji
我在集群中使用 aurora rds (mysql) 并且无法插入表情符号。 我试图插入的列具有以下排序规则:
utf8mb4 - utf8mb4_unicode_ci
我曾尝试使用客户端插入,也尝试从 mysql 工作台写入查询,但在这两种情况下,我都只看到 ???? 在该领域。
我更新了表默认字符集:utf8mb4 和默认排序规则:utf8mb4_unicode_ci
但仍然得到??? 而不是表情符号
编辑1:
我尝试编辑集群的参数组并将所有字符集值设置为 utf8mb4 并将所有排序规则值设置为 utf8mb4_unicode_ci 但仍然无法正常工作。
您的群集参数组应设置以下选项:
可能需要在更新后重新启动实例。 当您连接到群集时,您要为连接设置正确的排序规则,如下所示:
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
如果在此之后运行SHOW VARIABLES LIKE "%collation%"
,您应该看到三个都具有正确排序规则的变量(utf8mb4_unicode_ci)。
您还需要将表和列转换为正确的字符集和排序规则,这在DBA Stack Exchange上已得到解答: 如何在MySQL 5.5中轻松将utf8表转换为utf8mb4
更改表的默认字符集不会更改任何现有列。 您可以运行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)
接下来,我们更改表的默认值,但我们看到它不会更改列。 现有列自动获取一个选项,向我们显示它实际用于charset的内容,因为它现在与表默认值不同:
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
要转换现有列,请使用CONVERT TO CHARACTER SET。 这将重写表,如果需要,转换每列的现有数据:
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
现在两个列都没有说明它们各自的字符集,因为它们匹配表的默认值。
我写了一篇详细的博客文章(几年前),解释了如何在 Ruby on Rails 中支持表情符号和 Aurora MySQL:
我知道外部链接在这里不受欢迎,但这可以帮助处于类似情况的其他人。 该指南太长,无法粘贴为答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.