Django使用MySQL后端导致“行大小太大”

时间:2017-03-15 16:26:33

标签: mysql django

如何修复MySQL在使用Django时发出的臭名昭着的“行大太大”错误?

我有一个查询,我正在使用Django的select_related()附加多个表,如果我输出Django生成的SQL查询,并在MySQL shell中手动运行,它运行正常,但是当Django尝试为了执行它并迭代记录,Django抛出500错误:

Warning: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.

我该如何解决这个问题?既然这只是一个“警告”,我可以指示Django忽略它吗?

我在MySQL方面尝试了很多修复,例如使用Barracuda格式和表压缩启用Innodb,但这没有效果。

我也尝试减少select_related()中包含的表的数量,但这也没有效果,除非我从中删除几乎所有内容。

我怀疑正在创建临时表,并且该表要么没有使用梭子鱼格式和/或有太多行超过最大行大小,即使在Barracuda中也是如此。我猜它可能是前者,因为查询在MySQL shell中运行良好。有没有办法解决这个问题而不删除我的select_related()?

1 个答案:

答案 0 :(得分:0)

这个问题也发生在我的django项目中。 我必须编写记录器或“打印”来进行调试,当然我不能为我的项目创建单元测试用例。 我知道此问题是由我的表设置引起的,但是没有详细的失败日志,要通过语句告诉我导致错误,我无法进行单元测试。 希望有人可以帮忙。如果可以为python manage.py test提供调试模式。