我有一个下面列出的功能。当我将 LIMIT 设置为 0,60 时调用它,如下所示,它工作正常。但是,每当我将 LIMIT 增加到 70 或更高,甚至删除 LIMIT 时,MySQL 都会在我调用函数时出错,并出现错误:“Row 30153 was cut by GROUP_CONCAT()”。
我已尝试将 varchar 值增加到 10 000,但这无济于事。 据我从错误中了解到,它们在变量中似乎没有足够的空间容纳内容。但是就像我提到的那样,我尝试增加尺寸,但没有帮助。有任何想法吗??谢谢
DELIMITER $$
DROP FUNCTION IF EXISTS `fnAlbumGetPhotoList` $$
CREATE DEFINER=`root`@`%` FUNCTION `fnAlbumGetPhotoList`(_albumId int) RETURNS varchar(2048) CHARSET utf8
BEGIN
DECLARE _outPhotoList VARCHAR(2048);
SET _outPhotoList = (
SELECT (CAST(GROUP_CONCAT(CONCAT(photoId, '|', photoFileName) separator '~') AS CHAR(10000) CHARACTER SET utf8)) AS recentPhotoList
FROM
(
SELECT photoId, photoFileName
FROM photo
WHERE photoAlbumId = _albumId
AND photoIsDisabled = 0
AND photoIsActive = 1
ORDER BY photoId DESC
LIMIT 0,60
) as subQuery
);
RETURN _outPhotoList;
END $$
DELIMITER ;
最佳答案
您可以设置 group_concat_max_len变量到更大的值。或者使用 GROUP_CONCAT(DISTINCT ...)
缩短结果。
关于MySQL "Row 30153 was cut by GROUP_CONCAT()"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7208773/