준호씨의 블로그
MySQL - group_concat() 결과 길이 제한 group_concat_max_len 본문
MySQL에서 여러 row로 나눠져서 나오는 결과를 하나의 문자열로 합쳐서 구하고 싶을 때가 있습니다. Java나 Python에서 리스트를 묶을 때 사용하는 join함수 같이 말이죠. 그럴 때 사용할 수 있는 함수가 group_concat입니다.
예를 들어 test라는 테이블에 다음과 같은 데이터가 있다고 가정해 봅니다.
name
----
a
b
c
d
group_concat으로 name칼럼을 넣어줍니다.
select group_concat(name)
from test;
결과는 "a,b,c,d"라고 나옵니다.
a,b,c,d
그런데 길이가 짧아서 잘 나오는데 데이터가 많아지면 어느 순간 결과가 잘려나갑니다. "zzzzzzzzzz"와 데이터를 왕창 집어넣고 결과를 확인해 보면 마지막 부분이 끝까지 나오지 않고 잘린 것을 확인할 수 있습니다.
...,zzzzzzzzzz,z
이렇게 된 이유는 group_concat에 길이제한이 걸려있기 때문입니다.
group_concat_max_len이라는 설정에서 확인할 수 있습니다.
SHOW VARIABLES LIKE 'group_concat_max_len';
특별히 설정은 바꾸지 않았다면 1024로 나오는 것을 볼 수 있습니다. 앞서 테스트해 본 예제도 1024자까지 나오고 잘린 것이었습니다.
만약 작업을 하다가 이 크기를 좀 늘려보고 싶다면 다음과 같이 설정을 늘릴 수 있습니다.
SET SESSION group_concat_max_len = 10240;
10240자 까지는 잘 나오는 것을 확인할 수 있습니다.
이 값은 무한정 늘릴 수는 없고 32비트 환경에서는 4294967295자까지, 64비트 환경에서는 18446744073709551615까지 늘릴 수 있다고 합니다.
아래 문서에서 확인할 수 있습니다.
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_group_concat_max_len
상황에 맞춰 적당한 수준에 맞춰 사용하면 되겠습니다.