MySQL行大小错误

时间:2015-07-05 16:32:08

标签: mysql

我无法理解这个问题。对于行大小,我有一个远低于InnoDB最小值的表,当行中的最后一个字段被填充时,我开始收到错误。最后一个字段是1280(varchar)字段,尝试在其中放置879个字符的数据。返回:

  

#1118 - 行大小太大(> 8126)。将某些列更改为TEXT或BLOB   或使用ROW_FORMAT = DYNAMIC或ROW_FORMAT = COMPRESSED可能有所帮助。在   当前行格式,768字节的BLOB前缀以内联方式存储。

好的,所以我读了一遍,发现我在行中有太多的开销,所以我把它分成两部分。我这样做是通过从与桌子交谈的前端表格中取出一大部分,并将其完全存储在一个单独的表中。我修改了我的php以处理两个表而不是一个。没有区别 - 尝试用现在严重缩小的表格中相同的879个字符填写相同的最后一个字段时出现同样的错误。

所以我尝试制作表格ROW_FORMAT=DYNAMIC - 结果仍然相同。所以我尝试ROW_FORMAT=COMPRESSED - 是的,仍然是同样的问题。这让我疯了。

还剩下什么事? 我错过了什么?

根据要求,这是我的表结构:

DROP TABLE IF EXISTS `app_AIGPrReq`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `app_AIGPrReq` (
  `appID` int(11) NOT NULL AUTO_INCREMENT,
  `uID` int(11) NOT NULL,
  `uaID` int(11) NOT NULL,
  `status` varchar(32) NOT NULL DEFAULT 'Data Acquisition',
  `agRef` varchar(32) DEFAULT NULL,
  `groupName` varchar(64) DEFAULT NULL,
  `shortTitle` varchar(64) DEFAULT NULL,
  `recipient` varchar(64) DEFAULT NULL,
  `partOfValCh` varchar(64) DEFAULT NULL,
  `sector` varchar(64) DEFAULT NULL,
  `subSector` varchar(64) DEFAULT NULL,
  `topic` varchar(64) DEFAULT NULL,
  `apFunReqAGMARDT` decimal(12,2) DEFAULT NULL,
  `apFunReqGroup` decimal(12,2) DEFAULT NULL,
  `otherGroupName1` varchar(64) DEFAULT NULL,
  `apFunReqOther1` decimal(12,2) DEFAULT NULL,
  `otherGroupName2` varchar(64) DEFAULT NULL,
  `apFunReqOther2` decimal(12,2) DEFAULT NULL,
  `otherGroupName3` varchar(64) DEFAULT NULL,
  `apFunReqOther3` decimal(12,2) DEFAULT NULL,
  `totalFunding` decimal(12,2) DEFAULT NULL,
  `researchCosts` decimal(12,2) DEFAULT NULL,
  `otherCostsName1` varchar(64) DEFAULT NULL,
  `otherCosts1` decimal(12,2) DEFAULT NULL,
  `otherCostsName2` varchar(64) DEFAULT NULL,
  `otherCosts2` decimal(12,2) DEFAULT NULL,
  `otherCostsName3` varchar(64) DEFAULT NULL,
  `otherCosts3` decimal(12,2) DEFAULT NULL,
  `totalCosts` decimal(12,2) DEFAULT NULL,
  `groupAuthAgent` varchar(64) DEFAULT NULL,
  `groupAuthAgentAddress` varchar(128) DEFAULT NULL,
  `groupAuthAgentPhone` varchar(22) DEFAULT NULL,
  `groupAuthAgentEmail` varchar(64) DEFAULT NULL,
  `groupProjLeader` varchar(64) DEFAULT NULL,
  `groupProjLeaderAddress` varchar(128) DEFAULT NULL,
  `groupProjLeaderPhone` varchar(22) DEFAULT NULL,
  `groupProjLeaderEmail` varchar(64) DEFAULT NULL,
  `otherGroupMembers` varchar(1280) DEFAULT NULL,
  `structure` varchar(1280) DEFAULT NULL,
  `memGovBoard` varchar(1280) DEFAULT NULL,
  `projectGoal` varchar(2560) DEFAULT NULL,
  `ecoBenVal` varchar(2560) DEFAULT NULL,
  `ecoEval` varchar(2560) DEFAULT NULL,
  `projectPlan` varchar(5120) DEFAULT NULL,
  `milestone01` varchar(1024) DEFAULT NULL,
  `dateExp01` varchar(11) DEFAULT NULL,
  `payment01` varchar(11) DEFAULT NULL,
  `milestone02` varchar(1024) DEFAULT NULL,
  `dateExp02` varchar(11) DEFAULT NULL,
  `payment02` varchar(11) DEFAULT NULL,
  `milestone03` varchar(1024) DEFAULT NULL,
  `dateExp03` varchar(11) DEFAULT NULL,
  `payment03` varchar(11) DEFAULT NULL,
  `milestone04` varchar(1024) DEFAULT NULL,
  `dateExp04` varchar(11) DEFAULT NULL,
  `payment04` varchar(11) DEFAULT NULL,
  `milestone05` varchar(1024) DEFAULT NULL,
  `milestone05` varchar(1024) DEFAULT NULL,
  `dateExp05` varchar(11) DEFAULT NULL,
  `payment05` varchar(11) DEFAULT NULL,
  `milestone06` varchar(1024) DEFAULT NULL,
  `dateExp06` varchar(11) DEFAULT NULL,
  `payment06` varchar(11) DEFAULT NULL,
  `milestone07` varchar(1024) DEFAULT NULL,
  `dateExp07` varchar(11) DEFAULT NULL,
  `payment07` varchar(11) DEFAULT NULL,
  `milestone08` varchar(1024) DEFAULT NULL,
  `dateExp08` varchar(11) DEFAULT NULL,
  `payment08` varchar(11) DEFAULT NULL,
  `milestone09` varchar(1024) DEFAULT NULL,
  `dateExp09` varchar(11) DEFAULT NULL,
  `payment09` varchar(11) DEFAULT NULL,
  `milestone10` varchar(1024) DEFAULT NULL,
  `dateExp10` varchar(11) DEFAULT NULL,
  `payment10` varchar(11) DEFAULT NULL,
  `exResName` varchar(64) DEFAULT NULL,
  `exResPosition` varchar(64) DEFAULT NULL,
  `exResOrg` varchar(64) DEFAULT NULL,
  `exResAddress` varchar(128) DEFAULT NULL,
  `exResPhone` varchar(22) DEFAULT NULL,
  `exResEmail` varchar(64) DEFAULT NULL,
  `exResData` varchar(2560) DEFAULT NULL,
  `indRef1` varchar(64) DEFAULT NULL,
  `indRefEmail1` varchar(64) DEFAULT NULL,
  `indRefPhone1` varchar(22) DEFAULT NULL,
  `indRef2` varchar(64) DEFAULT NULL,
  `indRefEmail2` varchar(64) DEFAULT NULL,
  `indRefPhone2` varchar(22) DEFAULT NULL,
  `charRef1` varchar(64) DEFAULT NULL,
  `charRefEmail1` varchar(64) DEFAULT NULL,
  `charRefPhone1` varchar(22) DEFAULT NULL,
  `charRef2` varchar(64) DEFAULT NULL,
  `charRefEmail2` varchar(64) DEFAULT NULL,
  `charRefPhone2` varchar(22) DEFAULT NULL,
  `nonCashContribs` varchar(1280) DEFAULT NULL,
  `othGovTypFun` varchar(1280) DEFAULT NULL,
  `ethicInsBio` enum('yes','no') DEFAULT NULL,
  `nameOfCommit` varchar(64) DEFAULT NULL,
  `nameOfChair` varchar(64) DEFAULT NULL,
  `commitAddress` varchar(128) DEFAULT NULL,
  `webPubContactPerson` varchar(64) DEFAULT NULL,
  `webPubContactAddress` varchar(128) DEFAULT NULL,
  `webPubContactPhone` varchar(22) DEFAULT NULL,
  `webPubContactEmail` varchar(64) DEFAULT NULL,
  `webPubSummary` varchar(1280) DEFAULT NULL,
  `agr1` enum('yes','no') NOT NULL DEFAULT 'no',
  `dateStarted` int(11) NOT NULL,
  `lastModified` int(11) NOT NULL,
  `flulct` int(3) NOT NULL DEFAULT '0',
  PRIMARY KEY (`appID`,`uID`,`uaID`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=latin1;

以下是我要做的事情:

UPDATE `agmApps`.`app_AIGPrReq` SET `webPubSummary` = 'Co-innovation is a collaborative process between companies and R&D knowledge organisations that is proving to be a powerful accelerant of innovation.  FoodHQ, a partnership between New Zealand''s leading food innovators and enabling Local Government bodies, is proving to be a powerful force for providing innovative solutions to companies moving further up the value chain.  AGMARDT is supporting the creation of a national cohort of 30-50 of these innovative companies to collaborate with FoodHQ around their key export growth activities including product and process development, cost efficiency, meeting client preferences, shelf-life and food safety, and business model innovation.  Members of the cohort will also benefit from collaborating with each other, and as part of the Programme, FoodHQ will be convening events and provide an interaction platform that provide such opportunities.' WHERE `app_AIGPrReq`.`appID` = 13 AND `app_AIGPrReq`.`uID` = 54 AND `app_AIGPrReq`.`uaID` = 71

更新:我暂时将此特定表更改为MyISAM而不是InnoDB。这似乎允许一切正常工作,但是我确实希望像数据库中的每个其他表一样将其切换回InnoDB,并使其正常运行。

1 个答案:

答案 0 :(得分:0)

zedfoxus建议(见评论)确实是最好的解决方案。通过将每个表单数据存储分成多个部分来完全消除问题 - 通过每个表单部分方便地完成。现在,表单的每个部分都存储在它自己的表中,这严重地将DB表结构简化为更加高效和整洁的格式。即使达到每个表单问题的最大输入配额,也不再受到刺激性开销限制。

感谢所有回答并提供帮助的人。许多有用的线索和想法都发布在这里!