Django报错之django.db.utils.InternalError: (1366, "Incorrect string value: '\\xE7\\x94\\xA8

32 篇文章 2 订阅
18 篇文章 2 订阅

标题的完整错误是:

django.db.utils.InternalError: (1366, "Incorrect string value: '\\xE7\\x94\\xA8\\xE6\\x88\\xB7...' for column 'name' at row 1")

如果你在使用 Django 的时候 使用如下命令:

python3 manage.py migrate 

的时候遇上这个错误,那么其他打开的博客都可以关掉了!!!
看这篇,完美解决你的问题。

昨天创建了一个 models 然后同步到 MySQL 的时候报了这个错误,网上一搜博客,大体有如下几种解决办法:

1、删除数据库,重新创建数据库的时候指定数据库的编码格式为 utf8
2、在 Django 的 settings.py 文件中的 database 地方添加 test 和 options 模块,里面指定utf8
3、在 Ubuntu 的 MySQL conf 文件地方设置相关参数
4、删除models.py 中的中文字符

以上几种方法来来回回折腾了好几回,然而,并没有什么卵用!!!

气得我重新开了个项目,手把手把东西都恢复过来。

第二天,和同事说了这个问题,他搞了搞,然后沿着一路的轨迹终于找到了解决办法,问题出在 Django 连接的数据库的

django_migrations 表。

我们每次使用 python3 manage.py makemigrations app_name 之后,都会在相应 app 下的 migrations 文件中创建 py 脚本,这些脚本的作用就是用来同步到数据库的。

而 django_migrations 这张表的作用则是记录这些脚本的文件名。

而我们的报错提示里的 name 字段就是来自于这张表。
当我们查看这张表的结构可以发现,这张表的 name 字段的字符设置其实并不是 utf8 编码。

解决办法

所以我们的解决办法是:

  1. 把表的结构记录下来(show create table django_migrations)
  2. 删除这张表
  3. 创建这张表
  4. models.py 同步到数据库的步骤再操作一遍

完美解决!!!

注意:

可能有的人会说直接修改 django_migrations 的 name 字段的属性应该就可以了吧,我同事操作过,但可能因为之前已经写入了数据,所以并没有起到作用,因此,还是重新创建表来的方便。

感谢:

在此,感谢同事 张x 为此文提供的大力帮助!!!

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值