mysql django.db.utils.OperationalError:(1366,“Incorrect string value:'\\xC2\\x8E\\xC3\\xA9co...' for column 'announce' at row 1”)

xxb16uws  于 2023-11-16  发布在  Mysql
关注(0)|答案(2)|浏览(111)

我正在将数据从旧数据库迁移到新数据库。我在本地尝试了代码,它工作得很好。当我在生产环境中运行代码时,对于某些字段,它给出了错误django.db.utils.OperationalError: (1366, "Incorrect string value: '\\xC2\\x8E\\xC3\\xA9co...' for column 'announce' at row 1")
mysql版本本地- 8.0.16 mysql版本生产服务器- 5.7.33-
我该怎么补救。

wwwo4jvm

wwwo4jvm1#

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 '))接受任何字符

o75abkj4

o75abkj42#

在Settings.py

我的数据库设置有:
第一个月
并通过此命令将emoji需要支持的表或字段更改为正确的字符集:

对于表

ALTER TABLE my_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

字段ALTER TABLE my_table_name CHANGE my_field_name my_field_name VARCHAR(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
或者你去phpmyadmin并这样做

我把SQL放在一个迁移文件中,这样它就成了项目的一部分,不需要手动进行额外的数据库配置,所以一切都是无缝的。

相关问题