我正在尝试将数据插入到使用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 ;
编辑 - 更改了要编号的列,因为它们是特定于业务的,并且不认为包含其实际列名称是必要的或相关的。规范化实际上会解决问题,但仍然没有解释给定上下文的错误(错误说使用已经使用的文本列)
答案 0 :(得分:-2)
我也有同样的问题。请执行下列操作: 设置ENGINE = MyISAM。 此外,如果您的脚本很庞大,您可能希望更改脚本的执行时间。 在这种情况下,打开PHP的配置文件(php.ini for windows)并设置
max_execution_time=150 //(suppose) you can set it whatever you feel right.