mysql concat truncated longtext

mysql - Problemas con CONCAT y Longtext



truncated (3)

GROUP_CONCAT en documentos de mysql:

El resultado se trunca a la longitud máxima que da la variable de sistema group_concat_max_len, que tiene un valor predeterminado de 1024. El valor puede establecerse más alto, aunque la longitud máxima efectiva del valor de retorno está restringida por el valor de max_allowed_packet. La sintaxis para cambiar el valor de group_concat_max_len en el tiempo de ejecución es la siguiente, donde val es un entero sin signo:

SET [GLOBAL | SESSION] group_concat_max_len = val;

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

Espero que esto ayude.

El SQL ...

UPDATE Threads t SET t.Content = ( SELECT GROUP_CONCAT(a.Content ORDER BY a.PageID SEPARATOR ''<!-- pagebreak -->'') FROM MSarticlepages a WHERE a.ArticleID = t.MSthreadID GROUP BY a.ArticleID )

Como puede ver, toma todas las páginas de un artículo (que están almacenadas como texto largo en filas separadas) y GROUP_CONCAT las convierte en una única fila de texto largo. El problema es que los resultados son solo muchos caracteres y luego se trunca completamente, perdiendo aproximadamente el 90% de los contenidos. ¿CONCAT no maneja muy bien el longtext o hay algo más que estoy haciendo mal?


Según el manual de MySQL , la longitud máxima de GROUP_CONCAT está definida por la variable de sistema group_concat_max_len , que por defecto es 1024.

Este valor puede aumentarse usando el siguiente comando:

SET group_concat_max_len = <int>

Sin embargo, debe tenerse en cuenta que el valor de group_concat_max_len está limitado por el valor de otra variable del sistema, max_allowed_packet , que por defecto es 1.048,576.

Este valor se puede aumentar a un máximo de 1,073,741,824, usando la misma sintaxis:

SET max_allowed_packet = <int>


El título de esta publicación es "Problemas con CONCAT y Longtext", que es engañoso ya que el que planteó la pregunta realmente quería saber acerca de GROUP_CONCAT. Encontré esta publicación en Google porque tenía una limitación con CONCAT en MySQL. Para aquellos de ustedes que encuentran esta publicación y están buscando cómo aumentar la longitud máxima permitida para CONCAT aquí, es cómo hacerlo:

El problema es que ajustar group_concat_max_len no funcionará para CONCAT, solo funciona para GROUP_CONCAT, lo que significa que si está cumpliendo esta limitación con CONCAT, deberá volver a procesar su consulta para usar GROUP_CONCAT.

Entonces, diga que está usando CONCAT de la siguiente manera:

UPDATE some_table SET some_field=CONCAT(some_field,''super long string to append to the end of the data in some_field'') WHERE some_criteria_field = ''match on this string'';

Pero los datos que intentas concatenar al final de los contenidos de algunos campos se truncan o simplemente configuran el campo algún campo para anular / vaciar. Así que esta es la forma en que la consulta tendrá que buscar para aliviar las claras limitaciones de CONCAT:

SET @@session.group_concat_max_len = @@global.max_allowed_packet; UPDATE some_table SET some_table.some_field=( SELECT GROUP_CONCAT( queue.append_to_end SEPARATOR '''') as new_some_field FROM ( SELECT append_to_end FROM some_table WHERE some_criteria_field = ''match on this string'' UNION SELECT ''super long string to append to the end of the data in some_field'' as append_to_end ) as queue ) WHERE some_criteria_field = ''match on this string''

Para obtener información más detallada, consulte el artículo donde encontré esta respuesta en el siguiente enlace. Fuente: http://boulderapps.co/mysql-concat-limitation