由于一个emoji为4个字节的字符,而utf8存储格式只能支持1~3个字节的字符,所以使用utf8不支持emoji的存储,解决方案是使用utf8mb4存储格式。
一、让你的mysql支持emoji存储
如何使把mysql默认字符格式改为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数据库连接的字符格式
修改settings.py
中数据库的相关设置,主要是加上OPTIONS
选项指定django与mysql连接时使用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'},
}
}
到这里如无意外应该可以愉快地使用emoji了,有问题可以留言。
如果已经建立数据表且数据表中数据的存储格式不是utf8mb4,可以使用phpMyAdmin等工具把你想要支持emoji的字段改为utf8mb4格式,或者你也可以直接登录mysql进行相关字段的修改。