前几天项目需要后端支持存储输入法中的表情包,一开始以为挺复杂,结果大意了。
站在巨人的肩膀上让后端支持存储表情包简单的很。
数据流很简单如下:
所以与其说是让后端支持存储表情包,倒不如说成是让MySQL支持存储表情包。
而且像123
、abc
这种字符串也好,或者是123这种数字也好,亦或是表情包也罢,他们其实都有自己对应的编码格式、或者是编码表。就好比ASCII编码表中包含了a、b、c...z
等如下:
ACSII表中的符号占一个字符,对欧美佬来说,ACSII表中的符号可能以及基本够用了,但是对亚太地区的国家,比如中国,我们使用中文,所以需要新的编码表容纳中文。
比如我们常听的utf8
编码表就支持中文。MySQL的数据库表自然也是支持urf8编码。
换句话说,我们想往MySQL写数据时,需要告诉它我们的数据是啥编码格式的。如果我们不告诉它,或者是它本身不支持某种编码,那读写MYSQL肯定是有问题。
表情包对应的编码表是utf8mb4
,它占4个字符。所以如果你想让MYSQL支持存储表情包在创建库表时需要明确指定编码格式是utf8mb4
CREATE TABLE `test` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键', ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='test';
utf8mb4是utf8的超集,我们特别推荐你在创建库表时使用utf8mb4,而不是使用utf8
除了设置库表的编码之外,还需要设置MySQL的每个连接使用的编码,是的,这个单个会话的编码也是可以设置的。使用MySQL命令行类似如下:
set names utf8;
当然一般我们是在代码中和MySQL建立链接,所以不同的ORM框架会对应着不同的配置方式,但是他们肯定都会支持你设置每个连接使用的编码集。比如spring中可以如下设置
spring.datasource.url=jdbc:mysql://xxx/test?useUnicode=true&usessl=false&characterEncoding=utf8mb4
Thats all,简简单单.....