RDS for MySQL 使用 utf8mb4 字符集存储 emoji 表情
1. 基本原则
如果要实现存储 emoji 表情到 RDS for MySQL 实例,需要应用客户端、到 RDS for MySQL 实例的连接、RDS 实例内部 3 个方面统一使用或者支持 utf8mb4 字符集。
注:关于 utf8mb4 字符集,请参考 MySQL 官方文档
2. 三个条件的说明
2.1 应用客户端
客户端需要保证输出的字符串的字符集为 utf8mb4。
2.2 应用到 RDS MySQL 实例的连接
以常见的 JDBC 连接为例:
- 对于 JDBC 连接,需要使用 MySQL Connector/J 5.1.13(含)以上的版本。
- JDBC 的连接串中,不配置 characterEncoding 选项。
注:关于 MySQL Connector/J 5.1.13,请参考 MySQL 官方 Release Notes
比如
url="jdbc:mysql://myrds.mysql.rds.aliyuncs.com:3306/my_db"
2.3 RDS 实例配置
Step 1. 在控制台 参数配置 中修改 character_set_server 参数为 utf8mb4。
设置 character_set_server 为 utf8mb4 后,应用客户端与 RDS for MySQL 实例建立连接过程中 RDS for MySQL 实例会告知客户端连接字符集应为 utf8mb4。
注:关于如何使用 utf8mb4 字符集存储 emoji 表情,也可以参考 MySQL 官方文档
Step 2. 设置库的字符集为 utf8mb4
Step 3. 设置表的字符集为 utf8mb4
create table emoji_01 (
id int auto_increment primary key,
content varchar(255)
) default charset utf8mb4;
3. 通过 set names 命令设置会话字符集
对于 JDBC 连接串设置了 characterEncoding 为 utf8 或者做了上述配置仍旧无法正常插入 emoji 数据的情况,建议在代码中指定连接的字符集为 utf8mb4,样例代码如下:
String sqlCharset = "set names utf8mb4"
Statement statment = conn.createStatement();
resultSet = statment.executeQuery(sqlCharset);
注: set names utf8mb4; 命令会将 character_set_client、character_set_connection、character_set_results 3个会话字符集相关变量均设置为 utf8mb4,以保证写入或者读出的数据使用 utf8mb4 字符集进行解释。