我有这个错误:
行大小太大(> 8126)。将某些列更改为
TEXT
或BLOB
或使用ROW_FORMAT=DYNAMIC
或ROW_FORMAT=COMPRESSED
可能有所帮助。在当前行格式中,内联存储了{6}字节的BLOB
前缀。
要解决此问题,我可以将InnoDB更改为MyISAM吗?
答案 0 :(得分:3)
是的,您可以切换到MyISAM。但这不一定是个好主意:
REPAIR
InnoDB表每行可处理8KB以上。显然你有十几个或更多的TEXT / BLOB列遇到了问题?列的最多767个字节存储在行的主要部分中;其余部分放在一个单独的区块中。
我认为一个ROW_FORMAT
会将所有大列放在一个单独的块中,只留下20个字节指向它。
广泛行的另一种方法是进行"垂直分区"。也就是说,使用匹配的PRIMARY KEY
和一些大列构建另一个表(或多个表)。将稀疏填充的列移动到这样的表,然后在该表中具有较少的行,并使用LEFT JOIN
来获取数据是特别方便的。此外,如果您有一些您很少需要SELECT
的列,那么这些列很适合移动 - 当您不需要这些列时,不需要JOIN
。