Как уже упоминал Андре, результат GROUP_CONCAT()
ограничен group_concat_max_len
байтами.
Однако при использовании GROUP_CONCAT
с ORDER BY
результат дополнительно усекается до на одну треть из group_concat_max_len
. Вот почему ваш исходный результат был усечен до 341 (= 1024/3) байтов. Если вы удалите предложение ORDER BY
, это должно вернуть до полных 1024 байта для Comments
. Например:
CREATE TABLE MyTable
(
`Id` INTEGER,
`Type` VARCHAR(10),
`Data` TEXT
);
INSERT INTO MyTable VALUES
(0, 'Alpha', 'ABCDEF'),
(1, 'Alpha', 'GHIJKL'),
(2, 'Alpha', 'MNOPQR'),
(3, 'Alpha', 'STUVWX'),
(4, 'Alpha', 'YZ'),
(5, 'Numeric', '12345'),
(6, 'Numeric', '67890');
SET SESSION group_concat_max_len = 26;
-- Returns 26 bytes of data
SELECT Type, GROUP_CONCAT(Data SEPARATOR '') AS AllData_Unordered
FROM MyTable
GROUP BY Type;
-- Returns 26/3 = 8 bytes of data
SELECT Type, GROUP_CONCAT(Data SEPARATOR '') AS AllData_Ordered
FROM MyTable
GROUP BY Type
ORDER BY Id;
DROP TABLE MyTable;
Вернется
Type AllData_Unordered
Alpha ABCDEFGHIJKLMNOPQRSTUVWXYZ
Numeric 1234567890
Type AllData_Ordered
Alpha ABCDEFGH
Numeric 12345678
Я не нашел такого взаимодействия между GROUP_CONCAT()
и ORDER BY
, упомянутого в Руководстве по MySQL , но оно затрагивает, по крайней мере, MySQL Server 5.1.