1. 程式人生 > 其它 >後端如何儲存表情包?

後端如何儲存表情包?

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

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

資料流很簡單如下:

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