后端如何存储表情包?

前几天项目需要后端支持存储输入法中的表情包,一开始以为挺复杂,结果大意了。

站在巨人的肩膀上让后端支持存储表情包简单的很。

数据流很简单如下:

数据流

所以与其说是让后端支持存储表情包,倒不如说成是让MySQL支持存储表情包。

而且像123abc这种字符串也好,或者是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,简简单单.....

posted @ 2021-09-20 10:32  赐我白日梦  阅读(356)  评论(1编辑  收藏  举报