我有以下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
这将撤回我的所有任务以及与任务相关的所有评论。我遇到的问题是评论字段;使用* GROUP_CONCAT *创建,正在截断输出。我不知道为什么,我不知道如何克服这一点。 (它似乎是341个字符)
答案 0 :(得分:11)
GROUP_CONCAT()默认限制为1024字节。
要解决此限制并允许最多100 KB的数据,
在my.cnf中添加group_concat_max_len=102400
或使用SET GLOBAL group_concat_max_len=102400
查询服务器。
答案 1 :(得分:8)
正如安德烈提到的,GROUP_CONCAT()
的结果仅限于group_concat_max_len
个字节。
但是,当GROUP_CONCAT
与ORDER BY
一起使用时,结果会进一步截断为三分之一 group_concat_max_len
。这就是原始结果被截断为341(= 1024/3)字节的原因。如果删除ORDER BY
子句,则应该返回Comments
的完整1024个字节。例如:
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
我在MySQL Manual中提到的GROUP_CONCAT()
和ORDER BY
之间没有找到这种互动,但它至少会影响MySQL Server 5.1。