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
)

正如你可以看到它需要的所有文章的网页(这是每 存储为longtext在单独的行)和GROUP_CONCATs他们进入一个 单longtext行。问题是结果只有这么多 字然后它得到完全被截断,失去了约90%的 内容。不CONCAT不处理longtext非常好或者是有 别的事情我做错了什么?

有帮助吗?

解决方案

按照 MySQL手册GROUP_CONCAT的最大长度是由group_concat_max_len系统变量,缺省值为1024。

定义

此值可被增加,通过使用下面的命令:

SET group_concat_max_len = <int>

然而,应该注意的是,group_concat_max_len的值本身由另一个系统变量,max_allowed_packet值,默认为1,048,576的限制。

此值可以使用相同的语法来增加到最大的1073741824,:

SET max_allowed_packet = <int>

其他提示

这个帖子的标题是“麻烦与CONCAT和长文本”,这是一种误导,因为他谁提出了这个问题真的想知道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';

不过,您要串联上的some_field的内容结尾的数据越来越截断或只是平面设定场some_field为空/空。 因此,这里的查询将不得不寻求缓解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'

有关更深入的信息,请查看,我发现在链路波纹管这个答案的文章。 来源: http://boulderapps.co/mysql-concat-limitation

GROUP_CONCAT在mysql文档:

结果是截到的最大 长,由 group_concat_max_len系统变量, 其中有一个默认值1024。的 值可能设置更高的,虽然 有效的长度最大的回报 值而受到限制的价值 导致.语法 改变价值 group_concat_max_len在运行时间为 下所示,其中val是一个符号 整数:

SET [GLOBAL | SESSION] group_concat_max_len = val;

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

希望这会有所帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top