【问题标题】:SQL Error 1406 Data too long for columnSQL 错误 1406 列的数据太长
【发布时间】:2012-02-11 07:43:01
【问题描述】:

我试图在 MySQL 中执行下面的查询,但每次都得到 SQL 错误 1406 Data too long for column 错误。列数据类型为长文本。有什么想法吗?

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 cmets 并且它工作了。

【问题讨论】:

  • 您介意粘贴SHOW CREATE TABLE my_db.my_table 的结果吗?这可能有助于解决问题。

标签: mysql longtext


【解决方案1】:

除了明显可能会为不同的列出错(您的错误消息似乎没有提到确切的列,这很奇怪),以下是手册对LONGTEXT 的说明:

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

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

SELECT @@max_allowed_packet

如果它恰好是一个小值,请参阅此related answer 了解更多信息。

【讨论】:

  • 谢谢,max_allowed_pa​​cket 设置为 1M (1048576) 但这个查询只能达到 2Kb 左右吧?我会更改值并尝试一下。
【解决方案2】:

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

【讨论】:

  • 请注意,当前数据类型是LONGTEXT,最大长度为 4GB
【解决方案3】:

你的列数据类型一定有问题。

您插入的字符串(通过更新)是 1,875,远未接近 longtext 的限制。

看看插入字符串中的“pour l''Europe et l''Afrique”。这可能会导致您出现问题,请尝试插入不带“'”字符的数据。

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

【讨论】:

  • @AnthomnyBlake 此字符串成功保存在文本类型字段中
  • 感谢表格定义 - 我已经更新了我的答案,请试一试
  • 谢谢,我刚刚运行了另一个查询 [上面] 并得到了相同的结果。这次字符串没有转义字符。
  • 是您使用的确切查询吗?字段名称已从“content”更改为“contenu”,只是拼写错误?
  • 我仍然对字符串中的字符持怀疑态度,我会尝试简单地插入 'abcdefg....' 等来确定
猜你喜欢
  • 2013-04-03
  • 2015-03-05
  • 2021-05-09
  • 1970-01-01
  • 2018-10-28
  • 1970-01-01
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
相关资源
最近更新 更多