【问题标题】:Django unable to save unicode string in MySQL (OperationalError - 1366, "Incorrect string value")Django 无法在 MySQL 中保存 unicode 字符串(OperationalError - 1366,“字符串值不正确”)
【发布时间】:2017-06-14 13:37:17
【问题描述】:
我的一个模型中有一个TextField。我尝试将一串日文字符插入数据库,但出现此错误:
OperationalError at /admin/pages/page/add/
(1366, "Incorrect string value: '\\xE3\\x83\\x91\\xE3\\x83\\xAF...' for column 'body' at row 1")
我以为 Django、Python 和 MySQL 支持 Unicode 并首先使用它。发生了什么,我该如何解决?
【问题讨论】:
标签:
python
mysql
django
unicode
【解决方案1】:
这不是 Python/Django 相关的问题。您的 MySQL 表列不支持您当前使用的 unicode 格式。
MySQL 使用的默认字符集是utf-8。如果要更改任何特定列的字符集,可以将查询运行为:
ALTER TABLE db.table MODIFY COLUMN my_column VARCHAR(255)
CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;
地点:
- db:你的数据库
- 表:表名
- my_column:要修改的列的名称
【解决方案2】:
你只需要在保存价值的同时做流动。
class Employee(models.Model):
name = models.CharField(max_length=100)
def save(self, *args, **kwargs):
super(Employee, self).save(*args, **kwargs)
self.name = str(self.name.encode('unicode_escape'))
您需要在保存之前使用 unicode_escape 进行编码,如上例中提到的 (self.name = str(self.name.encode('unicode_escape'))) 然后您将能够保存任何值(包括日文字符)
并且不需要做任何其他设置或数据库更改