2012-01-16 15 views
6

Estoy intentando ejecutar la consulta siguiente en MySQL pero obtengo el error de SQL 1406 Datos demasiado largos para el error de columna cada vez. El tipo de datos de la columna es texto largo. ¿Algunas ideas?Error de SQL 1406 Datos demasiado largos para la columna

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; 

Gracias, aquí está el resultado de 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 | 

Sólo probamos esta consulta más corta que no contiene especial/escapado caracteres, pero todavía consigo el error.

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; 

[SOLUCIONADO] Gracias por su ayuda a todos, me borran los comentarios HTML y funcionó.

+3

¿Te importaría pegar un resultado de 'SHOW CREATE TABLE my_db.my_table'? Eso podría ayudar a resolver el problema. – Mchl

+0

Acabo de actualizar anteriormente, gracias. –

Respuesta

2

Debe haber un problema con el tipo de datos de la columna.

La cadena que está insertando (a través de la actualización) es 1.875, lo que no está cerca del límite del texto largo.

Eche un vistazo a este "pour l''Europe et l'Afrique" en su cadena de inserción. Puede estar causando problemas, intente insertar los datos sin el carácter "'".

podría intentar insertar una cadena de 1,875 caracteres, tal vez "aaaaaaa ...". esto descartaría un problema con el contenido de la cadena que está insertando.

+0

@AnthomnyBlake esta cadena se guardó con éxito en el tipo de texto presentado – Dau

+0

gracias por la def de la tabla - He actualizado mi respuesta, pruébelo – AnthonyBlake

+0

Gracias, acabo de ejecutar otra consulta [arriba] y obtuve el mismo resultado. Esta vez, la cadena no tiene caracteres escapados. –

1

Creo que haces que el contenido se archive como del tipo varchar. pero para almacenar el texto largo, hágalo del tipo text. este tipo no requiere ninguna longitud

+0

Tenga en cuenta que el tipo de datos actual es 'LONGTEXT' que tiene una longitud máxima de 4 GB – Mchl

+0

@Mchl gracias por la actualización – Dau

5

Además de la posibilidad obvia de obtener un error para una columna diferente (su mensaje de error no parece mencionar la columna exacta, que es raro), esto es lo que el manual dice sobre LONGTEXT :

una columna de texto con una longitud máxima de 4294967295 o 4 GB (232 - 1) caracteres. La longitud máxima efectiva es menor si el valor contiene caracteres de varios bytes. La longitud máxima efectiva de las columnas LONGTEXT también depende del tamaño de paquete máximo configurado en el protocolo de cliente/servidor y la memoria disponible. Cada valor de LONGTEXT es almacenado utilizando un prefijo de cuatro bytes de longitud que indica el número de bytes en el valor.

Puede verificar el tamaño máximo de paquete con esta consulta:

SELECT @@max_allowed_packet 

Si pasa a ser un valor pequeño, ver esto related answer para más información.

+1

Gracias, max_allowed_packet está establecido en 1M (1048576) pero esta consulta solo debe sumar unos 2 Kb, ¿verdad? Haré que cambie el valor y lo intentaré de todos modos. –

+0

Tiene razón, no debería ser un problema en este caso. –

Cuestiones relacionadas