【发布时间】:2015-09-22 19:33:33
【问题描述】:
我无法理解这个问题。我有一个远低于 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,并让它正常运行。
【问题讨论】:
-
能否请您发布
SHOW CREATE TABLE yourtable的输出以及给出错误的INSERT语句? -
@Martin 你可能想更新这个 -dev.mysql.com/doc/refman/5.0/en/char.html 我使用的是更新版本的 MySQL,所以 varchar 没有 255 个字符的限制。
-
stackoverflow.com/questions/15585602/… 的解决方案与您的情况相关吗?
-
您愿意更改表结构吗?有可以进入特定表的冗余列,例如
webPub、charRef、indRef等 -
不错的选择,@Cassandra。通过拆分为多个表格,您将走上获得长期成功的正确轨道。您也可能会在此过程中克服当前的问题。例如,当您创建
charRef时,只需创建id、email、phone列。这样您就可以根据需要添加任意数量的电子邮件和电话。
标签: mysql