1

我正在尝试将数据插入到使用 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 ;

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

4

1 回答 1

-2

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

max_execution_time=150 //(suppose) you can set it whatever you feel right.
于 2013-07-09T09:50:45.270 回答