4

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
)

如您所见,它将文章的所有页面(每个页面作为长文本存储在单独的行中)并 GROUP_CONCAT 将它们放入单个长文本行中。问题是结果只有这么多字符,然后它被完全截断,丢失了大约 90% 的内容。CONCAT 不能很好地处理长文本还是我做错了什么?

4

3 回答 3

15

根据MySQL 手册,最大长度GROUP_CONCATgroup_concat_max_len系统变量定义,默认为 1024。

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

SET group_concat_max_len = <int>

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

使用相同的语法,该值最多可以增加到 1,073,741,824:

SET max_allowed_packet = <int>
于 2009-02-09T17:43:25.463 回答
5

这篇文章的标题是“CONCAT 和 Longtext 的问题”,这具有误导性,因为提出问题的人真的想了解 GROUP_CONCAT。我在 Google 中找到了这篇文章,因为我正在处理 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

于 2014-04-12T05:46:39.703 回答
1

mysql 文档中的 GROUP_CONCAT:

结果被截断为由 group_concat_max_len 系统变量给出的最大长度,其默认值为 1024。该值可以设置得更高,尽管返回值的有效最大长度受 max_allowed_pa​​cket 值的限制。在运行时更改 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

希望这可以帮助。

于 2009-02-09T17:46:01.323 回答