Ошибка SQL 1406 Данные слишком длинные для столбца - PullRequest
8 голосов
/ 16 января 2012

Я пытаюсь выполнить запрос ниже в MySQL, но получаю ошибку 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 ]

5 голосов
/ 16 января 2012

Помимо очевидной возможности получения ошибки для другого столбца (в вашем сообщении об ошибке, кажется, не упоминается точный столбец, что странно), вот что руководство должно сказать о LONGTEXT :

Столбец TEXT с максимальной длиной 4 294 967 295 или 4 ГБ (232 - 1) символов.Эффективная максимальная длина меньше, если значение содержит многобайтовые символы. Эффективная максимальная длина столбцов LONGTEXT также зависит от настроенного максимального размера пакета в протоколе клиент / сервер и доступной памяти .Каждое значение LONGTEXT хранится с использованием четырехбайтового префикса длины, который указывает количество байтов в значении.

Вы можете проверить максимальный размер пакета с помощью этого запроса:

SELECT @@max_allowed_packet

Если это небольшое значение, см. Этот связанный ответ для получения дополнительной информации.

2 голосов
/ 16 января 2012

Должна быть проблема с типом данных вашего столбца.

Строка, которую вы вставляете (через обновление), равна 1875, что далеко не предел длинного текста.

Взгляните на это "pour l''Europe et l'Afrique" в вашей вставке. Это может вызывать проблемы, попробуйте вставить данные без символа «».

не могли бы вы попытаться вставить строку из 1875 символов, возможно, "aaaaaaa ....". это исключило бы проблему с содержимым вставляемой строки.

1 голос
/ 16 января 2012

Я думаю, что вы делаете контент, поданный как тип varchar. но для хранения длинного текста у вас есть тип text. этот тип не требуется любая длина

...