문제

SQL ...

UPDATE Threads t 
SET t.Content = (
    SELECT GROUP_CONCAT(a.Content ORDER BY a.PageID SEPARATOR '<!-- pagebreak -->') 
    FROM MSarticlepages a
    WHERE a.ArticleID = t.MSthreadID GROUP BY a.ArticleID
)

보시다시피 모든 기사의 페이지 (각각 별도의 행으로 LongText로 저장)를 가져 와서 Group_Concat를 단일 LongText 행에 가져옵니다. 문제는 결과가 너무 많은 캐릭터에 불과하다는 것입니다. 그런 다음 완전히 잘려서 내용물의 약 90%를 잃습니다. Concat는 Longtext를 잘 처리하지 않습니까? 아니면 내가 잘못하고있는 다른 일이 있습니까?

도움이 되었습니까?

해결책

에 따르면 MySQL 매뉴얼, 최대 길이 GROUP_CONCAT is defined by the group_concat_max_len 시스템 변수, 기본값 1024.

다음 명령을 사용 하여이 값을 증가시킬 수 있습니다.

SET group_concat_max_len = <int>

그러나의 가치는 group_concat_max_len 자체는 다른 시스템 변수의 값에 의해 제한됩니다. max_allowed_packet, 기본값 1,048,576.

이 값은 동일한 구문을 사용하여 최대 1,073,741,824로 증가 할 수 있습니다.

SET max_allowed_packet = <int>

다른 팁

이 게시물의 제목은 "Concat and Longtext의 문제"입니다. 그 질문을 제기 한 사람은 실제로 Group_concat에 대해 알고 싶어했기 때문에 오해의 소지가 있습니다. MySQL의 Concat에 제한을 다하고 있었기 때문에 Google 에서이 게시물을 찾았습니다. 이 게시물을 찾고 여기에 허용되는 최대 길이를 늘리는 방법을 찾고있는 분들을 위해 다음을 수행하는 방법이 있습니다.

문제는 group_concat_max_len을 조정하는 것입니다.

따라서 다음과 같은 방식으로 CONCAT를 사용하고 있다고 가정 해보십시오.

UPDATE some_table
SET some_field=CONCAT(some_field,'super long string to append to the end of the data in some_field')
WHERE some_criteria_field = 'match on this string';

그러나 Some_field의 내용이 끝날 때 연결하려는 데이터는 잘려나거나 비행기가 필드를 Null/Empty로 설정합니다. 따라서 다음은 쿼리가 CONCAT의 명확한 한계를 완화하기 위해 찾아야하는 방법입니다.

SET @@session.group_concat_max_len = @@global.max_allowed_packet;
UPDATE some_table SET some_table.some_field=(
     SELECT GROUP_CONCAT( queue.append_to_end SEPARATOR '') as new_some_field
     FROM
     (
          SELECT append_to_end FROM some_table WHERE some_criteria_field = 'match on this string'
          UNION
          SELECT 'super long string to append to the end of the data in some_field' as append_to_end
     ) as queue
) WHERE some_criteria_field = 'match on this string'

자세한 내용은 링크 에서이 답을 찾은 기사를 확인하십시오. 원천: http://boulderapps.co/mysql-concat-limitation

MySQL 문서에서 Group_Concat :

결과는 기본값이 1024 인 Group_concat_max_len 시스템 변수에 의해 제공되는 최대 길이로 잘립니다. 반환 값의 유효 최대 길이는 max_allowed_packet의 값에 의해 제한되지만 값은 더 높아질 수 있습니다. 런타임에서 group_concat_max_len의 값을 변경하려는 구문은 다음과 같습니다. 여기서 Val은 서명되지 않은 정수입니다.

SET [GLOBAL | SESSION] group_concat_max_len = val;

http://dev.mysql.com/doc/refman/55.0/en/group-by-functions.html#function_group-concat

도움이 되었기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top