Django + Docker + Mysql 支持Emoji

由于一个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进行相关字段的修改。

附上本文在我的博客中的地址

你可能感兴趣的:(Django + Docker + Mysql 支持Emoji)