前面文章介绍了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
2.设置参数
在参数中修改character_set_server的值为utf8mb4
注意:修改这个参数要重启实例,重启过程可能造成服务闪断
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;