当前位置:  开发笔记 > 编程语言 > 正文

MySQL中的GROUP_CONCAT和Longtext有问题

如何解决《MySQL中的GROUP_CONCAT和Longtext有问题》经验,为你挑选了2个好方法。

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,还是还有其他我做错的事情?



1> David Grant..:

根据MySQL手册,最大长度GROUP_CONCATgroup_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 = 



2> N D..:

这篇文章的标题是“ 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

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有