我在使用 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
以下是关于文本字段的所有知识:
答案4
主要是交叉发布来自 Stack Overflow,但这是一个开放的(并且已验证的)错误在 MySQL 服务器中InnoDB 引擎。目前的临时解决方法是回退到数据库管理系统引擎作为临时存储。因此,在您的 my.cnf 文件中:
internal_tmp_disk_storage_engine=MyISAM