Подтвердить что ты не робот

MySQL "Строка 30153 была вырезана функцией GROUP_CONCAT()"

У меня есть функция, перечисленная ниже. Когда я называю это с LIMIT, установленным на 0,60, как показано ниже, он работает нормально. Однако, когда я увеличиваю этот LIMIT до 70 или выше или даже удалю ошибки LIMIT, MySQL, когда я вызываю функцию с ошибкой: "Строка 30153 была вырезана 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 ;
4b9b3361

Ответ 1

Вы можете установить для переменной group_concat_max_len большее значение. Или, возможно, используйте GROUP_CONCAT(DISTINCT ...), чтобы сократить результат.

Ответ 2

1) Увеличьте ограничение на количество символов в результате запроса

SET global group_concat_max_len=15000;
ИЛИ ЖЕ
SET session group_concat_max_len=15000;

Используйте первый, если вы хотите, чтобы параметр был новым глобальным значением по умолчанию (закрепленным).
Используйте последнее, если вы хотите использовать этот параметр только во время текущего сеанса.
(Обратите также внимание, что некоторые сообщают о проблемах при использовании global опции. В этом случае попробуйте отключить ее, как в SET group_concat_max_len=15000;)

2) Затем добавьте DISTINCT качестве первого параметра в GROUP_CONCAT() чтобы удалить дубликаты из результата запроса. GROUP_CONCAT(DISTINCT..).

Ваш запрос будет выглядеть примерно так:

SET session group_concat_max_len=15000;
...
    ... GROUP_CONCAT(DISTINCT CONCAT(photoId, ...)
...
)      

Группа функций Concat, из документов MySQL:

SET [GLOBAL | SESSION] group_concat_max_len = val;

В MySQL вы можете получить объединенные значения комбинаций выражений. Чтобы исключить повторяющиеся значения, используйте предложение DISTINCT.

...

Результат усекается до максимальной длины, заданной системной переменной group_concat_max_len, значение которой по умолчанию равно 1024. Значение может быть установлено выше, хотя эффективная максимальная длина возвращаемого значения ограничена значением max_allowed_packet. Синтаксис для изменения значения group_concat_max_len во время выполнения выглядит следующим образом, где val - целое число без знака:

SET [GLOBAL | СЕССИЯ] group_concat_max_len = val;

Возвращаемое значение является недвоичной или двоичной строкой, в зависимости от того, являются ли аргументы недвоичными или двоичными строками. Тип результата - TEXT или BLOB, если group_concat_max_len не меньше или равен 512, в этом случае тип результата - VARCHAR или VARBINARY.

Предположительно, если вы не укажете необязательную альтернативу (GLOBAL или SESSION), по умолчанию будет указана первая из перечисленных альтернатив (в данном случае GLOBAL), хотя я не смог найти этого явно в документации.

О синтаксисе, используемом в документах MySQL:

Когда элемент синтаксиса состоит из ряда альтернатив, альтернативы разделяются вертикальными чертами ("|").

Когда может быть выбран один элемент из набора вариантов, альтернативы перечислены в квадратных скобках ("[" и "]"):

Когда должен быть выбран один член из набора вариантов, альтернативы указываются в фигурных скобках ("{" и "}")