【发布时间】:2014-01-21 12:10:54
【问题描述】:
关注这篇文章: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-日志。表类型:MyISAM。看起来它没有任何限制,我尝试选择带有 2000 个字符的简单 varchar,它看起来不错。
我有 3 个表:第一个 - 带有 ItemID 的项目,第二个 - 带有 ItemID 和 DescriptionID 的描述包,第三个带有 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:我想我找到了问题,我向我的提供者说了我的问题,他们回答我这个:
我与我们的托管团队审查了您的问题。你不能 更改该变量和其他变量的全局设置。然而, 您应该能够在每个会话的基础上设置该变量 在其他查询之前先设置它。希望有帮助。
所以现在的问题是,如何做到这一点。
【问题讨论】:
-
您真的需要在数据库层执行聚合吗?也许您只需要排序,然后在表示层中执行聚合?
-
到目前为止,您的字符串似乎超出了服务器的
max_allowed_packet。检查您的设置以确保这不是原因 -
您使用的是什么 MySQL 客户端?它对长字符串的显示有任何限制吗?你的表定义是什么样的?您的查询是什么样的?
-
我编辑了我的帖子,并回答了您的问题。
标签: mysql aggregate-functions concat