Mysql 无法添加字段…行大小…大于允许的最大大小

Mysql 无法添加字段…行大小…大于允许的最大大小,mysql,innodb,temp-tables,Mysql,Innodb,Temp Tables,我在MySQL日志中看到以下错误: [警告]InnoDB:无法在表“tmp”中添加字段“wd_field_ft_95_240”。“sql_1_0”,因为添加后,行大小为8155,大于索引页上记录允许的最大大小8126 这个tmp数据库是某种内部MySQL结构吗?这是我需要关心的吗?一些MySQL查询创建来保存部分结果 从MySQL 5.7.6开始,内部临时表的默认存储引擎是InnoDB,它对行大小的限制非常小,正如您所看到的,尽管BLOB/TEXT列可能会超出该限制 对于内部临时表,您可以返回到

我在MySQL日志中看到以下错误:

[警告]InnoDB:无法在表“tmp”中添加字段“wd_field_ft_95_240”。“sql_1_0”,因为添加后,行大小为8155,大于索引页上记录允许的最大大小8126

这个tmp数据库是某种内部MySQL结构吗?这是我需要关心的吗?

一些MySQL查询创建来保存部分结果

从MySQL 5.7.6开始,内部临时表的默认存储引擎是InnoDB,它对行大小的限制非常小,正如您所看到的,尽管BLOB/TEXT列可能会超出该限制

对于内部临时表,您可以返回到旧的5.7之前的默认存储引擎:

 internal_tmp_disk_storage_engine=MyISAM
这就是这个bug中提到的解决方法:

请向我们展示show CREATE TABLE。我敢打赌你有很多列声明为VARCHAR255。我还敢打赌,这些列中的大多数永远不需要255个字符。缩小它们

如果这还不够,则将一些更改为文本;数据将存储在页外,不会严重影响8K限制

如果这还不够,我们可以讨论垂直分区。此时,请向我们展示导致错误的查询。如果正在执行SELECT*,请将其更改为仅指定真正需要的列


不要使用MyISAM,这是一种倒退。在下一个版本中,它将消失,因此未来的迁移将受到影响。

您对MySQL的开发有发言权吗?我正在尝试将数据库从5.5迁移到5.7,这是一场噩梦。“新的和更好的是伟大的,但放弃向后兼容性使采用更加困难。@AuntJemima-Pancakes女士,我在开发中没有直接的发言权。这里需要进一步注意的是,8.0进一步改变了临时表的处理方式;我不知道它是否能解决你的问题。同时,比尔的建议是简单地一次性修复my.cnf,再加上重启,我希望它能工作。这只是一个警告吗?它是否会导致查询失败?或者它只是阻止它以最佳优化运行查询?我在错误日志中看到了这些条目,但这并不是说查询也失败了。我相信这会导致查询失败。运行查询的客户端收到一个错误。我不知道为什么服务器会将其记录为警告。