我正在将数据从旧数据库迁移到新数据库。我在本地尝试了代码,它工作得很好。当我在生产环境中运行代码时,对于某些字段,它给出了错误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-我该怎么补救。
django.db.utils.OperationalError: (1366, "Incorrect string value: '\\xC2\\x8E\\xC3\\xA9co...' for column 'announce' at row 1")
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 '))接受任何字符
o75abkj42#
在Settings.py
我的数据库设置有:第一个月并通过此命令将emoji需要支持的表或字段更改为正确的字符集:
对于表
ALTER TABLE my_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;个
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并这样做
ALTER TABLE my_table_name CHANGE my_field_name my_field_name VARCHAR(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
我把SQL放在一个迁移文件中,这样它就成了项目的一部分,不需要手动进行额外的数据库配置,所以一切都是无缝的。
2条答案
按热度按时间wwwo4jvm1#
字符串
你需要在保存之前用unicode_escape编码,如上面的例子self.name = str(self.name.encode('unicode_escape '))接受任何字符
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放在一个迁移文件中,这样它就成了项目的一部分,不需要手动进行额外的数据库配置,所以一切都是无缝的。