前面文章介绍了MYSQL支持Emoji表情,很多公司都在使用阿里云的RDS做生产数据库服务器。

错误提示

java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'nick_name' at row 1 

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) 

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593) 

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525) 

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986) 

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140) 

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620) 

at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1662) 

at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1581)

1.创建数据库时,字符集类型选择utf8mb4

阿里云RDS支持Emoji表情_阿里云

2.设置参数

在参数中修改character_set_server的值为utf8mb4

阿里云RDS支持Emoji表情_Emoji_02

注意:修改这个参数要重启实例,重启过程可能造成服务闪断

3.数据表字符集

通过以上配置数据库已经支持utf8mb4,数据库层支持插入emoji表情;但是表也要支持utf8mb4编码。

新建表

CREATE TABLE T_USER(

ID bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '主键(自增长)',

USER_NAME varchar(30) DEFAULT NULL COMMENT '登录用户名',

NAME varchar(30) DEFAULT NULL COMMENT '姓名',

NICKNAME varchar(100) DEFAULT NULL COMMENT '昵称',

STATUS INT NOT NULL COMMENT '状态',

LAST_UPDATE_BY VARCHAR(30) NOT NULL COMMENT '最后更新人',

LAST_UPDATE_DATE TIMESTAMP NOT NULL COMMENT '最后更新人',

CREATE_BY VARCHAR(30) NOT NULL COMMENT '添加人',

CREATE_DATE TIMESTAMP NOT NULL COMMENT '添加时间'

) default charset utf8mb4;

修改已经存在的表

将需要支持utf8mb4的数据表设置为:utf8mb4编码格式:

语法为:ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

例如:ALTER TABLE t_user CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

将需要支持的数据表字段,注意是字段也要设置为utf8mb4编码格式:

语法为:ALTER TABLE 表名 CHANGE 字段名 字段名 类型 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

例如:ALTER TABLE t_user CHANGE NICKNAME NICKNAME VARCHAR(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;