Python3+Django 1.10+mysqlclient 1.3.9: 无法保存表情字符
Python3+Django1.10+mysqlclient1.3.9: cannot save emoji characters
在管理面板中保存带有表情符号字符的字段时,我在 django 中遇到以下错误。
OperationalError at /admin/core/message/add/
(1366, "Incorrect string value: '\xF0\x9F\x98\x9E \xF0...' for column 'name' at row 1")
我确定数据库已准备好用于 utf8mb4
,因为我可以 write/read 这些表情符号字符 phpmyadmin
。
此外,保存的表情符号字符在 phpmyadmin
中正确显示,但在 django 输出中显示 ???
。
在我的另一个 django 项目中,emoji 播放效果很好,直到我找不到两种环境之间的区别。
那么当我使用 python 保存同样的东西时会出现什么问题?
问题出在 django 框架下,所以我想要一个让 django 工作的解决方案。
使用 OPTIONS - 字符集 在 settings.py
中设置 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
在管理面板中保存带有表情符号字符的字段时,我在 django 中遇到以下错误。
OperationalError at /admin/core/message/add/ (1366, "Incorrect string value: '\xF0\x9F\x98\x9E \xF0...' for column 'name' at row 1")
我确定数据库已准备好用于 utf8mb4
,因为我可以 write/read 这些表情符号字符 phpmyadmin
。
此外,保存的表情符号字符在 phpmyadmin
中正确显示,但在 django 输出中显示 ???
。
在我的另一个 django 项目中,emoji 播放效果很好,直到我找不到两种环境之间的区别。
那么当我使用 python 保存同样的东西时会出现什么问题?
问题出在 django 框架下,所以我想要一个让 django 工作的解决方案。
使用 OPTIONS - 字符集 在 settings.py
中设置 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