MYSQL CONCAT MAX LENGTH

时间:2014-01-03 18:15:46

标签: mysql aggregate-functions concat

关注此帖:POST ABOUT CONCAT 我的问题是我有很多行CONCAT成一行。例如,如果我有10行字符串大约50个字符,我的查询将只显示6-7行或类似的东西。 我在堆栈和谷歌搜索,我发现我可以通过命令更改CONCAT最大长度:SET group_concat_max_len := @@max_allowed_packet。我做错了什么?

修改 当我SHOW VARIABLES LIKE 'group_concat_max_len'时,它会显示1024。 Mysql版本5.0.96-log。表类型:MyISAM。看起来它没有任何限制,我尝试用2000个字符选择简单的varchar,它看起来很好。 我有3个表:1st - Item with ItemID,2nd - Descriptionpack with ItemID和DescriptionID,3rd Description with DescriptionID。

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

EDIT2:我想我发现了问题,我向我的提供商说了我的问题,他们回答了我的问题:

  

我与托管小组审核了您的问题。你不可能   更改该变量和其他变量的全局设置。然而,   你应该能够在每个会话的基础上设置该变量   在其他查询之前先设置它。希望有所帮助。

所以现在的问题是,如何做到这一点。

2 个答案:

答案 0 :(得分:26)

据推测,您使用的是GROUP_CONCAT(),而不是简单的CONCAT()

group_concat_max_len的默认值是1024,如果你正在构建大型长连接,这是一个非常小的限制。

要更改它,请使用此命令。我已将此示例中的长度设置为100,000。您可以将其设置为您需要的任何内容。

 SET SESSION group_concat_max_len = 100000;

max_allowed_pa​​cket的通常值是1兆字节,可能比你需要的多。

group_concat_max_len itself has an effectively unlimited size。它仅受平台的无符号字长限制:32位平台上的2 ^ 32-1和64位平台上的2 ^ 64-1。

如果仍然不适合您的申请,是时候采取@ eggyal的建议并重新考虑您的方法。

答案 1 :(得分:0)

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