【问题标题】: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:要修改的列的名称

【讨论】:

  • utf-8 不应该处理日文字符吗?
【解决方案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'))) 然后您将能够保存任何值(包括日文字符) 并且不需要做任何其他设置或数据库更改

【讨论】:

    猜你喜欢
    • 2020-06-07
    • 2017-03-18
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    相关资源
    最近更新 更多