MySQL中groupconcat和Longtext的问题

MySQL中groupconcat和Longtext的问题,mysql,group-concat,truncated,longtext,Mysql,Group Concat,Truncated,Longtext,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 ) 正如你所看到的,它占用了一篇文章的所有页面,每一页都是 作为长文

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
)
正如你所看到的,它占用了一篇文章的所有页面,每一页都是 作为长文本存储在单独的行中,并将它们分组到一个 单长文本行。问题是结果只有这么多 字符,然后它会被完全截断,丢失大约90%的 内容。CONCAT处理长文本的能力不是很好,还是有 我还做错了什么?

根据,GROUP_CONCAT的最大长度由GROUP_CONCAT_max_len系统变量定义,该系统变量默认为1024

可以使用以下命令增加此值:

SET group_concat_max_len = <int>

mysql文档上的组_CONCAT:

结果被截断到最大值 由 组_concat_max_len系统变量, 其默认值为1024。这个 值可以设置得更高,但 返回的有效最大长度 值受的值约束 允许的最大数据包数。语法为 更改 运行时的组concat\u max\u len如下 如下所示,其中val是未签名的 整数:


希望这能有所帮助。

这篇文章的标题是CONCAT和Longtext的麻烦,这是一种误导,因为提出这个问题的人真的想了解GROUP_CONCAT。我在谷歌上找到了这篇文章,因为我正在处理MySQL中CONCAT的一个限制。对于那些找到这篇文章并正在寻找如何增加CONCAT允许的最大长度的人,这里是如何做到的:

问题是调整group_concat_max_len对concat不起作用,它只对group_concat起作用,这意味着如果您在concat中遇到此限制,您将不得不修改查询以使用group_concat

因此,假设您以以下方式使用CONCAT:

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';
但是您试图连接到某个字段内容末尾的数据被截断,或者只是将该字段的某个字段设置为null/empty。 因此,以下是查询必须寻找的方法,以减轻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'
要获得更深入的信息,请查看我在下面的链接中找到这个答案的文章。
来源:

谢谢。我感谢你的帮助!注意,由于一些MySQL错误,wontfix max_allowed_数据包并不意味着仅允许max数据包。看到和
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';
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'