2013-03-19 41 views
0

没有深入了解为什么,我想根据group_concat函数的结果进行连接。 (不用说,我不能改变最大长度参数,但计划捕获我可以用来加入的散列) 从外观上看,当我使用md5时,我得到了不同的值。 例如。mysql group_concat,大小限制只适用于返回值吗?

select CONVERT(md5(group_concat(mycolumn)) USING utf8) ... 

返回从粘贴GROUP_CONCAT值到引号

select CONVERT(md5(group_concat('truncated value returned by group_concat...')) USING utf8) 

不同的结果,我可以假设,GROUP_CONCAT返回完整结果的MD5函数,或可能的差额由别的原因引起的?

回答

2

GROUP_CONCAT确实不是将完整结果返回至MD5。我测试了它具体是:

SET group_concat_max_len = 5; 
SELECT MD5(GROUP_CONCAT('123456')); 
-- 827ccb0eea8a706c4c34a16891f84e7b 
SET group_concat_max_len = 999; 
SELECT MD5(GROUP_CONCAT('123456')); 
-- e10adc3949ba59abbe56e057f20f883e 

如果你不能改变group_concat_max_len,你将不得不另谋出路。

1

group_concat默认限制为1024,如在documentation清楚地解释:

的结果被截断其具有 一个缺省值,该值是由 group_concat_max_len系统变量给定的最大长度, 1024.

您可以通过更改输入group_concat_max_len系统变量来更改此设置。

这会影响您看到的结果和函数的参数。

此外,您用于获取结果的工具可能会进一步截断返回值。

最后,如果您使用这样的group_concat(),那么您应明确使用order by子句。订购不保证。实际上,如果底层数据没有变化,我认为它不会在运行之间发生变化。但是,删除和插入记录可能会改变顺序。

+0

的确我计划订购它......但现在看起来像是回到了绘图板 – Endre 2013-03-19 21:44:47

相关问题