在不详细说明原因的情况下,我想根据group_concat函数的结果进行连接。(不用说,我不能改变最大长度参数,但计划捕获一个我可以用来连接的散列)从外观上看,我在使用md5时得到了不同的值。例如:
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函数返回了完整的结果,或者这种差异可能是由其他原因造成的?
发布于 2018-07-17 04:24:26
一种策略是首先对行执行md5(concat())
操作,这会将大小减少到每行32字节,然后对整个操作执行group_concat
操作。这将允许您一次获得floor(group_concat_max_len / 33)
行的散列(不要忘记逗号)。
我做了类似的here。
如果这仍然不适合您的group_concat_max_len
,那么您可以使用GROUP BY
生成比floor(group_concat_max_len / 33)
行更小的组,对这些行进行散列,然后对这些散列进行散列(同样是在小于...的组中)。这将是丑陋的,但您可以继续嵌套到所需的深度,以散列所需的行数。
或者你可以要求某个有能力修改group_concat_max_len
的人用上面的策略来威胁他们的CPU。
https://stackoverflow.com/questions/15510418
复制相似问题