後端如何存儲表情包?

前幾天項目需要後端支持存儲輸入法中的表情包,一開始以爲挺複雜,結果大意了。

站在巨人的肩膀上讓後端支持存儲表情包簡單的很。

數據流很簡單如下:

數據流

所以與其說是讓後端支持存儲表情包,倒不如說成是讓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,簡簡單單.....

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章