Python3+Django1.10+mysqlclient1.3.9:无法保存表情符号

Posted

技术标签:

【中文标题】Python3+Django1.10+mysqlclient1.3.9:无法保存表情符号【英文标题】:Python3+Django1.10+mysqlclient1.3.9: cannot save emoji characters 【发布时间】:2017-05-09 18:08:18 【问题描述】:

在管理面板中保存带有表情符号字符的字段时,我在 django 中收到以下错误。

/admin/core/message/add/ 处的操作错误 (1366,“不正确的字符串值:'\xF0\x9F\x98\x9E \xF0...' 用于第 1 行的列 'name'”)

我确定数据库已经为utf8mb4 做好了准备,因为我可以在phpmyadmin 中写入/读取这些表情符号字符。

此外,保存的表情符号字符在phpmyadmin 中正确显示,但在 django 输出中显示???

在我的另一个 django 项目中,表情符号表现良好,直到我无法找到两种环境之间的区别。

那么当我使用 python 保存相同的东西时会出现什么问题?

问题出在django框架下,所以我想要一个让django工作的解决方案。

【问题讨论】:

mysql utf8mb4, Errors when saving Emojis的可能重复 【参考方案1】:

settings.py 中使用OPTIONS - charset 设置DATABASE 部分可以解决这个问题:

# Database
# https://docs.djangoproject.com/en/1.10/ref/settings/#databases

DATABASES =  
    'default': 
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'myproject',
        'HOST': 'mysql',
        'USER': 'django',
        'PASSWORD': '******',
        'OPTIONS': 
            # !!!!!! THIS MATTERS !!!!!!
            'charset': 'utf8mb4',
        
    ,  

查看文档:https://docs.djangoproject.com/en/1.10/ref/settings/#charset

【讨论】:

以上是关于Python3+Django1.10+mysqlclient1.3.9:无法保存表情符号的主要内容,如果未能解决你的问题,请参考以下文章

centos7 + Apache2.4 + python3.5 +mod_wsgi4.5.15 + Django1.10安装指导

Django 1.10 和 Socket.IO 与 Python 3

使用Django1.10版本时,配置文件要注意的地方

如何在python文件中,引用django1.10的model

django virtualenv中使用mysql数据库,python 3.5 django1.10 mysql 5.7.17

Linux下安装Python3和django