2012-01-16 61 views
6

我想在MySQL中执行下面的查询,但得到SQL错误1406数据太长,每次列错误。列数据类型是longtext。有任何想法吗?SQL错误1406数据太长的列

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&#233;tails</a></li><li>Panavision Prague - <a href="#" id="offices_linkPanavisionPrague">D&#233;tails</a></li><li>Panavision Manchester - <a href="#" id="offices_linkPanavisionManchester">D&#233;tails</a></li><li>Panavision Alga &amp; Cinecam - <a href="#" id="offices_linkPanavisionAlga">D&#233;tails</a></li><li>Panavision Rh&ocirc;ne-Alpes - <a href="#" id="offices_linkPanavisionRhoneAlpes">D&#233;tails</a></li><li>Panavision Marseille - <a href="#" id="offices_linkPanavisionMarseille">D&#233;tails</a></li><li>Panavision Pologne - <a href="#" id="offices_linkPanavisionPoland">D&#233;tails</a></li><li>Panavision Dublin - <a href="#" id="offices_linkPanavisionDublin">D&#233;tails</a></li><li>Panavision Belgique - <a href="#" id="offices_linkPanavisionBelgium">D&#233;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注释和它的工作。

+3

你介意粘贴'SHOW CREATE TABLE my_db.my_table'的结果吗?这可能有助于解决问题。 – Mchl 2012-01-16 10:40:24

+0

刚刚更新上面,谢谢。 – 2012-01-16 10:56:38

回答

2

列数据类型必须存在问题。

你插入的字符串(通过更新)是1,875,这远不是longtext的限制。

看看这个“在你的插入字符串中注入欧洲和非洲”。它可能会导致您遇到问题,尝试插入不带“”“字符的数据。

你能否尝试插入1,875个字符的字符串,或许是“aaaaaaa ....”。这将排除您插入的字符串内容的问题。

+0

@AnthomnyBlake这个字符串成功保存在文本类型字段 – Dau 2012-01-16 10:53:54

+0

感谢您的表def - 我已经更新了我的答案,请试试 – AnthonyBlake 2012-01-16 11:12:48

+0

谢谢,我刚刚运行另一个查询[上],并得到了相同的结果。这次字符串没有转义的字符。 – 2012-01-16 11:29:48

1

我认为你把内容归档为varchar类型。但为了存储长文本,您已将其设置为text类型。这种类型不需要任何长度

+0

请注意,当前的数据类型是'LONGTEXT',它有一个4GB的最大长度 – Mchl 2012-01-16 10:49:12

+0

@Mchl感谢您的更新 – Dau 2012-01-16 10:53:00

5

除了明显的可能性为不同的列获取错误(您的错误消息似乎没有提及确切的列,这很奇怪),这里是手册必须说的关于LONGTEXT

最大长度为4,294,967,295或4GB(232 - 1) 个字符的TEXT列。如果该值包含 多字节字符,则有效最大长度会减少。 LONGTEXT 列的有效最大长度还取决于 客户端/服务器协议和可用内存中配置的最大数据包大小。每个LONGTEXT值是 ,使用四字节长度前缀存储,该前缀指示值中的 字节的数量。

您可以验证最大数据包大小与此查询:

SELECT @@max_allowed_packet 

如果碰巧是一个很小的值,请参阅本related answer进一步的信息。

+1

谢谢,max_allowed_pa​​cket设置为1M(1048576),但这个查询只能达到约2Kb?无论如何,我会改变这个值并试一试。 – 2012-01-16 11:39:08

+0

你说得对,在这种情况下不应该是个问题。 – 2012-01-16 11:39:56