由于一個emoji為4個字節(jié)的字符,而utf8存儲格式只能支持1~3個字節(jié)的字符撞鹉,所以使用utf8不支持emoji的存儲饥侵,解決方案是使用utf8mb4存儲格式烁焙。
一、讓你的mysql支持emoji存儲
如何使把mysql默認(rèn)字符格式改為utf8mb4施绎,很多其他的博客都有介紹溯革,本文不再贅述。這里介紹一下使用docker的情況下如何使mysql支持emoji存取谷醉。
方法比較簡單致稀,在docker-compose.yml文件mysql配置里面加上一個command命令就可以了,如下
version: '2'
services:
db:
image: mysql
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
expose:
- "3306"
ports:
- 3306:3306
environment:
- MYSQL_DATABASE= xxx
- MYSQL_ROOT_PASSWORD= xxx
二俱尼、修改django與mysql數(shù)據(jù)庫連接的字符格式
修改settings.py
中數(shù)據(jù)庫的相關(guān)設(shè)置,主要是加上OPTIONS
選項(xiàng)指定django與mysql連接時(shí)使用utf8mb4格式
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': MYSQL_DB,
'USER': MYSQL_USER,
'PASSWORD': MYSQL_PASS,
'HOST': MYSQL_HOST_S,
'PORT': MYSQL_PORT,
'OPTIONS': {'charset': 'utf8mb4'},
}
}
到這里如無意外應(yīng)該可以愉快地使用emoji了抖单,有問題可以留言。
如果已經(jīng)建立數(shù)據(jù)表且數(shù)據(jù)表中數(shù)據(jù)的存儲格式不是utf8mb4,可以使用phpMyAdmin等工具把你想要支持emoji的字段改為utf8mb4格式矛绘,或者你也可以直接登錄mysql進(jìn)行相關(guān)字段的修改耍休。