我正在尝试在MySQL中执行下面的查询,但每次都会因为列错误而得到SQL错误1406数据太长。列数据类型是longtext。有什么想法吗?
UPDATE `my_db`.`my_table` SET `content` = '<div id="primaryContent"><div id="offices_map"></div><!-- #offices_map --><div id="offices_mapControlPanel" class="cf"><ul id="offices_continentLinkList"><li><a href="#" rel="Africa">AFRIQUE</a></li><li><a href="#" rel="Asia">ASIE</a></li><li><a href="#" rel="Australasia">AUSTRALASIE</a></li><li><a href="#" rel="Europe" id="offices_europeLink" class="current">EUROPE</a></li><li><a href="#" rel="NorthAmerica">AMERIQUE DU NORD</a></li><li class="last"><a href="#" rel="SouthAmerica">AMERIQUE DU SUD</a></li></ul><ul id="offices_mapLegend"><li id="offices_mapLegendRedPointer">Bureaux Panavision</li><li id="offices_mapLegendYellowPointer">Agents Panavision</li></ul></div><!-- #offices_mapLegend --><div id="offices_ownedOfficesContactDetails" class="cf"><h2>Bureaux Panavision</h2><ul class="cf"><li class="first"><strong>Panavision Greenford</strong> - pour l''Europe et l''Afrique - <a href="#" id="offices_linkPanavisionGreenford">Détails</a></li><li>Panavision Prague - <a href="#" id="offices_linkPanavisionPrague">Détails</a></li><li>Panavision Manchester - <a href="#" id="offices_linkPanavisionManchester">Détails</a></li><li>Panavision Alga & Cinecam - <a href="#" id="offices_linkPanavisionAlga">Détails</a></li><li>Panavision Rhône-Alpes - <a href="#" id="offices_linkPanavisionRhoneAlpes">Détails</a></li><li>Panavision Marseille - <a href="#" id="offices_linkPanavisionMarseille">Détails</a></li><li>Panavision Pologne - <a href="#" id="offices_linkPanavisionPoland">Détails</a></li><li>Panavision Dublin - <a href="#" id="offices_linkPanavisionDublin">Détails</a></li><li>Panavision Belgique - <a href="#" id="offices_linkPanavisionBelgium">Détails</a></li></ul></div><!-- #offices_ownedOfficesContactDetails --></div><!-- #offices_mapControlPanel --><div class="cf"></div>' WHERE `my_table`.`id` = 27;
谢谢,这是SHOW CREATE TABLE
的结果 CREATE TABLE `my_table` (
`content` longtext NOT NULL,
`cat` text NOT NULL,
`starter` int(1) NOT NULL,
`at` int(11) DEFAULT '0',
`table` varchar(60) DEFAULT NULL,
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=84 DEFAULT CHARSET=latin1 |
刚尝试了这个较短的查询,其中不包含特殊/转义的字符,但我仍然收到错误。
UPDATE `my_db`.`my_table` SET `contenu` = '<div id="primaryContent"><div id="offices_map"></div><!-- #offices_map --><div id="offices_mapControlPanel" class="cf"><ul id="offices_continentLinkList"><li><a href="#" rel="Africa">AFRIQUE</a></li><li><a href="#" rel="Asia">ASIE</a></li><li><a href="#" rel="Australasia">AUSTRALASIE</a></li><li><a href="#" rel="Europe" id="offices_europeLink" class="current">EUROPE</a></li><li><a href="#" rel="NorthAmerica">AMERIQUE DU NORD</a></li><li class="last"><a href="#" rel="SouthAmerica">AMERIQUE DU SUD</a></li></ul><ul id="offices_mapLegend"><li id="offices_mapLegendRedPointer">Bureaux Panavision</li><li id="offices_mapLegendYellowPointer">Agents Panavision</li></ul></div><!-- #offices_mapLegend -->' WHERE `my_table`.`id` = 27;
[解决] 感谢大家的帮助,我删除了HTML评论并且有效。
答案 0 :(得分:5)
除了明显可能为另一列收到错误(您的错误消息似乎没有提到确切的列,这很奇怪),这是手册对LONGTEXT所说的内容:
TEXT列,最大长度为4,294,967,295或4GB(232 - 1) 字符。如果值包含,则有效最大长度较小 多字节字符。 LONGTEXT的有效最大长度 列还取决于配置的最大数据包大小 客户端/服务器协议和可用内存。每个LONGTEXT值都是 使用指示数量的四字节长度前缀存储 值中的字节。
您可以使用此查询验证最大数据包大小:
SELECT @@max_allowed_packet
如果它恰好是一个较小的值,请参阅此related answer以获取更多信息。
答案 1 :(得分:2)
您的列数据类型必定存在问题。
您要插入的字符串(通过更新)是1,875,远远超出了longtext的限制。
在插入字符串中查看“pour l''Europe et l''Afrique”。它可能会导致您出现问题,尝试插入没有“\ n”字符的数据。
你可以尝试插入1,875个字符的字符串,也许是“aaaaaaa ....”。这将排除您正在插入的字符串内容的问题。
答案 2 :(得分:1)
我认为您将内容归档为varchar类型。但是对于存储长文本,您将其设为text
类型。这种类型不需要任何长度