Emoji表情是4个字节
而mysql的utf8编码最多3个字节,所以数据插不进去,而utfmb4是支持四个字节的。
所以解决方案就是:将mysql编码从utf8转换成utf8mb4。
具体要修改的地方如下:
1 修改mysql 配置,添加如下内容
[client]
default-character-set = utf8mb4 # 客户端数据默认字符集
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
2 数据库配置
创建数据库时候
charset 设置为 utf8mb4
collation 设置为 utf8mb4_general_ci
创建的数据表
CREATE TABLE `person` (
`dtype` varchar(31) NOT NULL,
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`age` int(11) NOT NULL,
`email` varchar(255) DEFAULT NULL,
`mobile` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`hobby` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
如果是已经创建好的数据库做如下修改(1、2 步就可以)
1 对每一个数据库:
ALTER DATABASE dababase_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
2 对每一个表:
ALTER TABLE tablle_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
//3 对存储emoji表情的字段:
//ALTER TABLE tablle_name CHANGE `field_name` `field_name` VARCHAR(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
修改后表结构:
CREATE TABLE `person` (
`dtype` varchar(31) COLLATE utf8mb4_unicode_ci NOT NULL,
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`age` int(11) NOT NULL,
`email` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`mobile` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`hobby` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
接下来测试下是否可以保持emoji 表情
通过postman 调用保存接口插入数据
再查询出所有数据
再看数据库里的内容