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

问题描述 投票:1回答:1

如何解决使用Django时MySQL发出的臭名昭著的“行大小太大”错误?

我有一个查询,我要使用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方面的众多修复,例如启用具有梭子鱼格式和表压缩的Innodb,但这没有任何效果。

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

我怀疑正在创建一个临时表,并且该表要么没有使用梭子鱼格式,并且/或者有太多行,甚至在梭子鱼中也超过了最大行大小。我猜可能是前者,因为查询可以从MySQL Shell正常运行。有什么方法可以解决此问题而不删除我的select_related()?

mysql django
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.