개발이야기

MySQL - group_concat() 결과 길이 제한 group_concat_max_len

준호씨 2023. 6. 6. 01:25
반응형

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

 

MySQL :: MySQL 8.0 Reference Manual :: 5.1.8 Server System Variables

 

dev.mysql.com

 

상황에 맞춰 적당한 수준에 맞춰 사용하면 되겠습니다.

반응형