SQL ......
UPDATE Threads t SET t.Content = ( SELECT GROUP_CONCAT(a.Content ORDER BY a.PageID SEPARATOR '') FROM MSarticlepages a WHERE a.ArticleID = t.MSthreadID GROUP BY a.ArticleID )
正如您所看到的,它将所有文章的页面(每个页面都作为longtext存储在不同的行中)和GROUP_CONCAT将它们放入单个longtext行中.问题是结果只有很多字符然后被完全截断,丢失了大约90%的内容.CONCAT不能很好地处理longtext,还是还有其他我做错的事情?
根据MySQL手册,最大长度GROUP_CONCAT
由group_concat_max_len
系统变量定义,默认为1024.
使用以下命令可以增加此值:
SET group_concat_max_len =
然而,应该注意,值group_concat_max_len
本身受到另一个系统变量的值的限制max_allowed_packet
,默认值为1,048,576.
使用相同的语法,此值可以增加到最大值1,073,741,824:
SET max_allowed_packet =
这篇文章的标题是“ 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字段设置为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'
有关更多详细信息,请查看下面的文章,该文章是我在下面的链接中找到的。资料来源:http : //boulderapps.co/mysql-concat-limitation