MySQL 中的最大行大小问题

MySQL 中的最大行大小问题

我在使用 MySQL 时遇到问题,我有一个包含许多文本字段的表。当我尝试存储一些数据时,出现了此错误。

行大小太大。所用表类型的最大行大小(不包括 BLOB)为 8126。您必须将某些列更改为 TEXT 或 BLOB

我存储在每个字段中的文本都不太长,每个字段只有几段。

我能做些什么?

答案1

感谢回答的人。您发布的链接是开始学习的非常有用的基础。

最后我找到了这个页面: http://download.oracle.com/docs/cd/E17952_01/refman-5.5-en/innodb-compression-usage.html

我在 my.cnf 的配置中在[mysqld]部分中添加了以下两行:

innodb_file_per_table
innodb_file_format = Barracuda

然后我ALTER通过 phpMyAdmin 使用以下命令访问我的表:

ALTER TABLE nombre_tabla
 ENGINE=InnoDB
 ROW_FORMAT=COMPRESSED 
 KEY_BLOCK_SIZE=8; 
 SHOW WARNINGS;

您也可以使用上面链接中看到的其他设置,但这些设置对我来说效果很好。

答案2

你可能想看看本文这在很大程度上解释了 MySQL 行大小。需要注意的是,即使使用 TEXT 或 BLOB 字段,行大小仍可能超过 8K(InnoDB 的限制),因为它将每个字段的前 768 个字节存储在页面中。解决此问题的最简单方法是使用Barracuda 文件格式使用 InnoDB。这基本上完全解决了这个问题,因为只存储指向文本数据的 20 字节指针,而不是存储前 768 个字节。

答案3

好吧,按照 mysql 所说的做:将大字段从 varchar 转换为文本或 blob(ALTER TABLE)。文本字段的行为非常类似于 varchar(索引需要前缀长度,但仍然可以工作),但是是分开存储的。

此参考资料告诉您每个股票 mysql 表引擎的确切限制:

http://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html

以下是关于文本字段的所有知识:

http://dev.mysql.com/doc/refman/5.0/en/blob.html

答案4

主要是交叉发布来自 Stack Overflow,但这是一个开放的(并且已验证的)错误在 MySQL 服务器中InnoDB 引擎。目前的临时解决方法是回退到数据库管理系统引擎作为临时存储。因此,在您的 my.cnf 文件中:

internal_tmp_disk_storage_engine=MyISAM

相关内容