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

时间:2016-12-09 05:28:15

标签: mysql innodb temp-tables

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

[Warning] InnoDB: Cannot add field `wd_field_ft_95_240` in table `tmp`.`#sql_1_0` because after adding it, the row size is 8155 which is greater than maximum allowed size (8126) for a record on index leaf page.

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

2 个答案:

答案 0 :(得分:6)

某些MySQL查询创建internal temporary tables以保存部分结果。

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

您可以返回旧的5.7之前的默认存储引擎以获取内部临时表:

 internal_tmp_disk_storage_engine=MyISAM

这是此错误中提到的解决方法:" Bug #77398 row size too large in mysql 5.7 query"

答案 1 :(得分:0)

请告诉我们SHOW CREATE TABLE。我打赌你有很多列被宣布为VARCHAR(255)。我还打赌,大多数这些列永远不会需要255个字符。收缩它们。

如果这还不够,请将少数更改为TEXT;数据将存储在页外,不会严重影响8K限制。

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

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