mysqli行大小太大

时间:2012-06-14 22:19:32

标签: mysql xml mysqli innodb

我正在尝试将数据插入到使用innodb存储引擎的mysql表中并收到此错误:

Mysqli statement execute error : Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs

我理解错误,但我的表几乎只包含text和mediumtext列。 基本上,我试图从Web服务存储一堆可变长度的xml响应。我能够保存这些响应(请求在批处理过程中按顺序发生),直到我到达col14,其中响应的插入给出了上述错误

我的备份想法,如果我无法使其工作,只需将xml保存在服务器上,并将文件位置放在数据库中。

我已经包含了创建表代码

CREATE TABLE IF NOT EXISTS `qb_results` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `col1` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL,
  `col2` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `col3` text COLLATE utf8_unicode_ci,
  `col4` text COLLATE utf8_unicode_ci,
  `col5` text COLLATE utf8_unicode_ci,
  `col6` text COLLATE utf8_unicode_ci,
  `col7` mediumtext COLLATE utf8_unicode_ci,
  `col8` mediumtext COLLATE utf8_unicode_ci,
  `col9` mediumtext COLLATE utf8_unicode_ci,
  `col10` mediumtext COLLATE utf8_unicode_ci,
  `col11` mediumtext COLLATE utf8_unicode_ci,
  `col12` mediumtext COLLATE utf8_unicode_ci,
  `col13` mediumtext COLLATE utf8_unicode_ci,
  `col14` mediumtext COLLATE utf8_unicode_ci,
  `col15` mediumtext COLLATE utf8_unicode_ci,
  `col16` mediumtext COLLATE utf8_unicode_ci,
  `col17` mediumtext COLLATE utf8_unicode_ci,
  `col18` mediumtext COLLATE utf8_unicode_ci,
  `updated_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=61 ;

编辑 - 更改了要编号的列,因为它们是特定于业务的,并且不认为包含其实际列名称是必要的或相关的。规范化实际上会解决问题,但仍然没有解释给定上下文的错误(错误说使用已经使用的文本列)

1 个答案:

答案 0 :(得分:-2)

我也有同样的问题。请执行下列操作: 设置ENGINE = MyISAM。 此外,如果您的脚本很庞大,您可能希望更改脚本的执行时间。 在这种情况下,打开PHP的配置文件(php.ini for windows)并设置

max_execution_time=150 //(suppose) you can set it whatever you feel right.