我正在尝试保存来自iPhone应用的评论,而现在很可能将包含表情符号。无论我做什么,我都无法将表情符号保存到MySQL数据库......常量Unicode错误。
我一直收到的错误是:
Incorrect string value: '\xF0\x9F\x97\xBC \xF0...' for column 'body' at row 1
我传入数据库的字符串是:
test_txt = u"Emoji - \U0001f5fc \U0001f60c \U0001f47b ...".encode('utf-8')
更新:这是我正在使用的模型:
class ItemComment(db.Model):
item = db.ForeignKey(Item)
user = db.ForeignKey(Profile)
body = db.CharField(max_length=255, blank=True, null=True)
active = db.BooleanField(default=True)
date_added = db.DateTimeField(auto_now_add=True)
def __unicode__(self):
return "%s" % (self.item)
奇怪的是,如果我尝试将其传递给我在MySQL中创建的字段而不是Django models.py它可以正常工作。但是只要我在Django模型中注册该字段就会死掉。还有另一种方法可以存储这些吗?
任何想法都会令人惊讶 我不能再坚持这个......
更新2 :使用以下UPDATE语句在终端中跟踪它(请注意U0001f5fc)
UPDATE 'table' SET 'body' = '', WHERE 'table'.'id' = 1 ; args=(u'\U0001f5fc')
使用as hard来传递值:
force_unicode(smart_str(value), encoding='utf-8', strings_only=False, errors='ignore')
但错误仍然存在:
_mysql_exceptions.Warning: Incorrect string value: '\xF0\x9F\x97\xBC' for column 'body' at row 1
完全失败!!!
干杯,
答案 0 :(得分:5)
为MySQL服务器更改charset utf8mb4(稍后版本5.5.3)
在my.ini
(my.cnf
)
[mysqld]
character_set_server = utf8mb4
collation-server = utf8mb4_unicode_ci
或SQL查询
SET NAMES 'utf8mb4';
另见http://dev.mysql.com/doc/refman/5.5/en/charset-connection.html
或删除角色来执行此操作。
蟒
import re
# emoji_text is unicode
no_emoji_text = re.sub('[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF]', '', str(emoji_text))
谢谢。
答案 1 :(得分:0)
我使用Django 1.11并关注setting.py
,而创建sql
可以很好地存储表情符号,
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db_name',
'USER': 'db_user',
'PASSWORD': 'your_password',
'OPTIONS': {'charset': 'utf8mb4'}, # note here!!!
}
}
sql
来自this回答,
CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;