2012-06-14 107 views
1

我试图将数据插入到一个MySQL表使用InnoDB存储引擎,并正在此错误:mysqli的行大小太大

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 

我理解错误,但我的表是由几乎只有文本和中间文本列。 基本上,我试图从一个可变长度的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

偶数列...闻起来像正常化的候选人?这也将解决长度问题。请注意,使用utf-8会显着增加非文本列中的已用空间。 – Wrikken

+0

编号的列?只是...不。使它成为qb_results(id,set,data),这样你就会有记录而不是列。 –

+0

[保存base64数据 - 行大小过大问题]的可能重复(http://stackoverflow.com/questions/8220489/saving-base64-data-row-size-too-large-issue) – Jocelyn

回答

-2

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

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