【问题标题】:MYSQL CONCAT MAX LENGTHMYSQL 连接最大长度
【发布时间】: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


【解决方案1】:

大概你用的是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 的建议并重新考虑您的方法了。

【讨论】:

  • 我这样做了,结果相同。顺便说一句,我计算了查询显示的字符数,它是 984。
  • @Crackeraki,你 must also set max_allowed_packet 否则它不会工作。
  • @Ollie,关于“可以将其设置为您需要的任何东西”,肯定有一个限制......
  • 最大允许限制为 65535
  • @MuhammadWasim 看到这个:限制远大于 64K。
【解决方案2】:
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  

【讨论】:

    猜你喜欢
    • 2011-02-03
    • 1970-01-01
    • 2023-04-05
    • 2017-04-04
    • 2011-11-19
    • 2010-10-10
    • 2016-06-18
    相关资源
    最近更新 更多