前幾天項目需要后端支持存儲輸入法中的表情包,一開始以為挺復雜,結果大意了。
站在巨人的肩膀上讓后端支持存儲表情包簡單的很。
數據流很簡單如下:
所以與其說是讓后端支持存儲表情包,倒不如說成是讓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,簡簡單單.....