MYSQL CONCAT MAX LENGTH

15
根据这篇帖子:有关CONCAT的帖子,我的问题是我有很多行需要CONCAT成一行。例如,如果我有10行字符串,每行大约50个字符,我的查询结果只会显示6-7行,类似于这样的情况。我在Stack和Google上搜索后发现,我可以通过命令SET group_concat_max_len := @@max_allowed_packet来更改CONCAT的最大长度。我做错了什么吗? 编辑:当我运行SHOW VARIABLES LIKE 'group_concat_max_len'时,它显示1024。Mysql版本为5.0.96-log。表类型为MyISAM。看起来它没有任何限制,我尝试选择一个简单的varchar,它有2000个字符,看起来还不错。我有3个表:第一个是具有ItemID的“项目”表,第二个是具有ItemID和DescriptionID的“Descriptionpack”表,第三个是具有DescriptionID的“Description”表。
Select
DISTINCT Item.ItemID as item
,GROUP_CONCAT(Description.DescriptionID) AS description
From Item 
LEFT OUTER JOIN descriptionpack
on Item.ItemID=descriptionpack.ItemID
LEFT OUTER JOIN description
on descriptionpack.descriptionID=description.descriptionID
GROUP BY item

编辑2: 我想我找到了问题所在,我向提供商解释了我的问题,他们回答我说:

我已经与我们的主机团队审查了您的问题。您将无法更改该变量以及其他变量的全局设置。但是,您应该能够在设置其他查询之前先设置每个会话基础上的该变量。希望这有所帮助。

现在的问题是如何实现。


您真的需要在数据库层执行聚合吗?也许您仅需要先排序,然后在呈现层执行聚合? - eggyal
到目前为止,似乎您的字符串超出了服务器的“max_allowed_packet”限制。请检查您的设置以确保这不是原因。 - Alma Do
你使用的是哪个MySQL客户端?它在显示长字符串方面有任何限制吗?你的表定义是什么样子的?你的查询是什么样子的? - O. Jones
我编辑了我的帖子,并回答了你的问题。 - Crackeraki
2个回答

43

我猜你正在使用 GROUP_CONCAT(),而不是简单的 CONCAT()

group_concat_max_len 的默认值为1024,如果你正在构建较长的连接串,则这是一个相当小的限制。

要更改它,请使用此命令。在此示例中,我将长度设置为100,000。您可以根据需要将其设置为任何值。

 SET SESSION group_concat_max_len = 100000;

max_allowed_packet的通常值为1MB,这可能比您实际需要的还要多。

group_concat_max_len本身具有有效无限大小。它仅受平台上的无符号字长度限制:在32位平台上为2^32-1,在64位平台上为2^64-1。

如果这仍然不足以满足您的应用程序需求,那么是时候考虑一下 @eggyal 的建议并重新考虑您的方法了。


我做了那个,结果一样。顺便计算了一下查询显示的字符数,是984。 - Crackeraki
2
@Crackeraki,你还必须设置 max_allowed_packet,否则它将无法工作。 - Pacerier
@Ollie,关于“可以将其设置为任何您需要的内容”,肯定有限制吧... - Pacerier
最大允许限制为65535。 - Muhammad Wasim
@MuhammadWasim 看一下:限制远远大于64K。 - O. Jones

4
You need change group_concat_max_len default value in the bellow config file   
**my.cnf file(Linux) and my.ini file(windows)**   

[mysqld]//Add this line group_concat_max_len=15000 under mysqld section

group_concat_max_len=15000

Note: After change is done You need to restart your MySQL server.   
my.cnf file path in linux :   
 1. /etc/my.cnf   
2./etc/mysql/my.cnf   
3.$MYSQL_HOME/my.cnf   
4.[datadir]/my.cnf   
5.~/.my.cnf  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接