我有相當大的InnoDB表(〜100K行)在MySQL 5.6和UDF功能:MySQL的切斷字符串從使用UDF子查詢
CREATE AGGREGATE FUNCTION collect RETURNS STRING SONAME 'libcollect.so';
當我查詢
SELECT collect('CASES:10,DROP:10', shipment_bucket_code, weight) FROM d_shipments;
"83.140000,2513.910000,4439.710000,1764.100000,7852.960000,98.920000,828.620000,2346.950000,1566.620000,107594.130000"
將是結果,它是正確的。
但如果我叫UDF子查詢
SELECT * FROM (
SELECT collect('CASES:10,DROP:10', shipment_bucket_code, weight) FROM d_shipments
) as sub;
結果將是"83.140000,2513.910000,4439.710000,1764.100000"
。字符串被頂級查詢截斷。它由UDF調試確認。
此外,如果我在小桌子上使用這些查詢,一切工作正常。當使用內置功能時,如CONCAT("83.140000,2513.910000,4439.710000,1764.100000,7852.960000,98.9", "20000,828.620000,2346.950000,1566.620000,107594.130000")
在理性搜索的過程中,我遇到了similar old non-fixed bug。 是否有任何解決方法?看起來MySQL的子查詢字符串結果受限於某個緩衝區的大小,因爲字符串切割總是平等發生。
UPD:目前finder解決方法是重寫子查詢作爲聯接。
UPD2:...但它並不適用於所有查詢。可能的話,錯誤會在相當大的表格上重現。