我有一个与MySQL的问题,我有一个很多文本字段的表。 当我尝试存储一些数据时,我得到这个错误。
行尺寸太大。 所使用的表types(不计算BLOB)的最大行大小是8126.您必须将某些列更改为TEXT或BLOB
我在每个领域存储的文本都不是太长,每一个只有几个段落。
我能做什么?
感谢那些回答的人。 你发布的链接是开始学习的非常有用的基础。
最后,我发现这个网页: 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
然后我用这个命令通过phpMyAdmin ALTER我的表:
ALTER TABLE nombre_tabla ENGINE=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; SHOW WARNINGS;
也可以使用其他的设置,你可以在上面的链接阅读,但这些对我来说很好。
你可能想看看这篇文章 ,它解释了很多关于MySQL行大小的内容。 需要注意的是,即使使用TEXT或BLOB字段,行大小仍可能超过8K(InnoDB的限制),因为它将每个字段的前768个字节存储在页面中。 解决这个问题的最简单方法是在InnoDB中使用Barracuda文件格式 。 这基本上通过只存储20字节指针到文本数据,而不是存储第一个768字节,摆脱了这个问题。
那么,像MySQL一样说:将大字段从varchar转换为文本或blob(ALTER TABLE)。 文本字段的行为很像varchar(索引需要前缀长度,但仍然工作),但分开存储。
这个参考告诉你每个股票的MySQL表引擎的确切限制:
http://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html
以下是关于文本字段的所有知识:
大部分来自Stack Overflow的交叉发布,但是这是MySQL服务器的InnoDB引擎中的 一个开放(和已validation的)错误 。 现在暂时的修复是作为临时存储回退到MyISAM引擎。 那么,在你的my.cnf文件中:
internal_tmp_disk_storage_engine=MyISAM