2013-03-19 43 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

相關問題