2011-08-26 18 views
30

Tengo una función que se enumera a continuación. Cuando lo llamo con el LIMIT establecido en 0,60 como se ve a continuación, funciona bien. Sin embargo, siempre que aumente ese LÍMITE a 70 o superior, o incluso que elimine el LÍMITE, los errores de MySQL cuando llamo a la función con el error: "La fila 30153 fue cortada por GROUP_CONCAT()".MySQL "La fila 30153 fue cortada por GROUP_CONCAT()" error

He intentado aumentar los valores de varchar a 10 000, pero eso no ayuda. Por lo que puedo entender por el error, no parece que haya suficiente espacio en la variable para los contenidos. Pero como mencioné, he intentado aumentar el tamaño, pero no ayuda. ¿¿Algunas ideas?? Gracias

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 ; 

Respuesta

60

Puede establecer la variable group_concat_max_len en un valor mayor. O tal vez use GROUP_CONCAT(DISTINCT ...) para acortar el resultado.

+2

Gracias - Los resultados ya son distintos, así que traté de añadir esto en mi proc: 'SET GLOBAL group_concat_max_len = 15000;' ¿No hizo la diferencia sin embargo ?? ¿Es ese el uso correcto? – Cheeky

+0

Consulte el manual (haga clic en "group_concat_max_len", es un enlace) para obtener una descripción completa. 15 000 parece algo pequeño, pruebe el valor máximo de su plataforma :) Lea también el tema GROUP_CONCAT, también tiene algo de información sobre el comportamiento y comentario sobre la variable max_allowed_packet. – ain

+0

¡Oh, y deshazte del reparto CHAR (10000) - hace que el resultado sea más largo y por lo tanto causa problemas, no los soluciona! – ain

2

1) aumentar el límite en el número de caracteres de la consulta resultante
SET group_concat_max_len=15000;
O
SET session group_concat_max_len=15000;

2) A continuación, añadir DISTINCT como primer parámetro a GROUP_CONCAT() para eliminar duplicados de la consulta resultado. GROUP_CONCAT(DISTINCT ..).

Su consulta se verá de la misma familia:

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

Para obtener más información, consulte esta sección de la documentación https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat