MySQL使用Group_Concat和Concat时截断结果

Sal*_*lly 7 mysql sql

我有以下SQL(我删除了一些selesct fi:

SELECT node_revisions.title                          AS 'Task', 
       node_revisions.body                           AS 'Description', 
       Date_format(field_due_date_value, '%e/%c/%Y') AS 'Due Date', 
       users.name                                    AS 'User Name', 
       (SELECT GROUP_CONCAT(Concat(CHAR(10),Concat_ws( ' - ', name, From_unixtime( TIMESTAMP, 
               '%e/%c/%Y' )),CHAR(10),COMMENT))
        FROM   comments 
        WHERE  comments.nid = content_type_task.nid) AS 'Comments' 
FROM   content_type_task 
       INNER JOIN users 
         ON content_type_task.field_assigned_to_uid = users.uid 
       INNER JOIN node_revisions 
         ON content_type_task.vid = node_revisions.vid 
ORDER  BY content_type_task.nid DESC 
Run Code Online (Sandbox Code Playgroud)

这将撤回我的所有任务以及与任务相关的所有注释.我遇到的问题是评论字段; 使用*GROUP_CONCAT*创建,正在截断输出.我不知道为什么,我不知道如何克服这一点.(它似乎是341个字符)

And*_*dre 11

默认情况下,GROUP_CONCAT()限制为1024个字节.

要解决此限制并允许最多100 KB的数据,请添加group_concat_max_len=102400my.cnf或使用查询服务器SET GLOBAL group_concat_max_len=102400.


Jos*_*shS 9

正如Andre所说,结果GROUP_CONCAT()仅限于group_concat_max_len字节.

然而,在使用时GROUP_CONCATORDER 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;
Run Code Online (Sandbox Code Playgroud)

将返回

Type    AllData_Unordered
Alpha   ABCDEFGHIJKLMNOPQRSTUVWXYZ
Numeric 1234567890

Type    AllData_Ordered
Alpha   ABCDEFGH
Numeric 12345678
Run Code Online (Sandbox Code Playgroud)

我还没有发现之间的这种互动GROUP_CONCAT()ORDER BY中提到的MySQL手册,但它至少影响到MySQL服务器5.1.