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