後端如何儲存表情包?
阿新 • • 發佈:2021-09-20
前幾天專案需要後端支援儲存輸入法中的表情包,一開始以為挺複雜,結果大意了。
站在巨人的肩膀上讓後端支援儲存表情包簡單的很。
資料流很簡單如下:
所以與其說是讓後端支援儲存表情包,倒不如說成是讓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,簡簡單單.....