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 ;
编辑 - 更改的列进行编号,因为他们具体的业务,并没有觉得这是必要的或相关的,包括他们的实际列名。正常化实际上可以解决问题,但仍然没有解释给出的上下文错误(错误说使用文本列,它已被使用)
偶数列...闻起来像正常化的候选人?这也将解决长度问题。请注意,使用utf-8会显着增加非文本列中的已用空间。 – Wrikken
编号的列?只是...不。使它成为qb_results(id,set,data),这样你就会有记录而不是列。 –
[保存base64数据 - 行大小过大问题]的可能重复(http://stackoverflow.com/questions/8220489/saving-base64-data-row-size-too-large-issue) – Jocelyn