行大小太大(> 8126)我可以将 InnoDB 更改为 MyISAM

Mar*_*ski 1 mysql myisam innodb

我有这个错误:

行大小太大 (> 8126)。将某些列更改为TEXTorBLOB或使用ROW_FORMAT=DYNAMICorROW_FORMAT=COMPRESSED可能会有所帮助。在当前的行格式中,BLOB768 字节的前缀是内联存储的。

为了解决这个问题,我可以将 InnoDB 更改为 MyISAM 吗?

Ric*_*mes 5

是的,您可以切换到 MyISAM。但这不一定是个好主意:

  • MyISAM不支持事务
  • REPAIRMyISAM 表崩溃后经常需要

InnoDB 表每行可以处理超过 8KB。显然,您因拥有十几个或更多 TEXT/BLOB 列而遇到了问题?行的主体部分最多存储一列的 767 个字节;其余的放在一个单独的块中。

我认为人们ROW_FORMAT会将所有大列放在一个单独的块中,只留下 20 个字节来指向它。

宽行的另一种方法是进行“垂直分区”。也就是说,构建另一个表(或多个表),其中包含匹配的列PRIMARY KEY和一些大列。将稀疏填充的列移动到这样的表中,然后在该表中减少行数,并用于LEFT JOIN获取数据是特别方便的。另外,如果您有一些很少需要的列SELECT,那么这些列就是移动的好选择——JOIN当您不需要这些列时就不需要。