关注本帖:POST ABOUT CONCAT
我的问题是,我有许多行CONCAT
成一行。例如,如果我有10行,字符串大约为50个字符,那么我的查询将只显示其中6-7行或类似的内容。
我在Stack和Google中搜索,发现我可以通过命令更改concat max length:SET group_concat_max_len := @@max_allowed_packet
。我做错了什么?
编辑:
当我SHOW VARIABLES LIKE 'group_concat_max_len'
它显示我1024。
mysql版本5.0.96-log。表类型:myisam。看起来它没有任何限制,我尝试选择简单的varchar和2000个字符,它看起来很好。
我有三张表:第一张是带itemID的项,第二张是带itemID和descriptionID的descriptionpack,第三张是带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
伊迪丝2:我想我发现了问题,我把我的问题告诉了我的供应商,他们回答我:
我和我们的主持团队讨论了你的问题。你不可能
更改该变量和其他变量的全局设置。然而,
您应该能够通过以下方式在每个会话的基础上设置该变量:
先设置它,然后再进行其他查询。希望有帮助。
现在的问题是,如何做到这一点。
最佳答案
假设您使用的是GROUP_CONCAT()
,而不是简单的CONCAT()
。group_concat_max_len
的默认值是1024,这是一个非常小的限制,如果您正在构建长的连接。
要更改它,请使用此命令。我在这个例子中将长度设置为100000。你可以把它设置成你需要的任何东西。
SET SESSION group_concat_max_len = 100000;
max_allowed_包的通常值是1兆字节,这可能比您需要的要多。
group_concat_max_len
itself has an effectively unlimited size它仅受平台的无符号字长度限制:32位平台上为2^32-1,64位平台上为2^64-1。如果这还不足以满足您的应用程序需求,那么是时候接受@eggyal的建议并重新考虑您的方法了。