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

Row size too large (> 8126) can i just change InnoDB to MyISAM

我有这个错误:

Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.

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

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

  • MyISAM 不支持 t运行sactions
  • MyISAM tables 在崩溃后经常需要 REPAIR

InnoDB table 每行可以处理超过 8KB 的数据。显然你 运行 有十几个或更多 TEXT/BLOB 列来解决这个问题?行的主要部分最多存储一列的 767 个字节;其余的放在一个单独的块中。

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

宽行的另一种方法是 "vertical partitioning"。也就是说,构建另一个 table(或 tables)与匹配的 PRIMARY KEY 和一些大列。将稀疏填充的列移动到这样的 table,然后在 table 中减少行,并使用 LEFT JOIN 来获取数据特别方便。此外,如果您有一些您很少需要 SELECT 的列,那么这些列是移动的好候选者——当您不需要这些列时不需要 JOIN