MySQL에서 GROUP_CONCAT() 함수를 사용할 때 여러 행의 값을 하나로 합치는 경우가 많습니다. 그런데 구분자를 일반적인 콤마(,) 대신 줄바꿈(new line)으로 지정하면 의도대로 동작하지 않는 것처럼 보이는 경우가 종종 있습니다. 이 글에서는 줄바꿈 구분자를 올바르게 사용하는 방법과 결과가 한 줄로 보이는 이유까지 자세히 알아보겠습니다.
GROUP_CONCAT에서 줄바꿈 구분자를 사용하는 기본 문법
줄바꿈 문자(\r\n)를 구분자로 사용하려면 아래와 같은 형식으로 쿼리를 작성합니다.
SELECT GROUP_CONCAT(CONCAT_WS(' ', 컬럼명1, 컬럼명2) SEPARATOR "\r\n") FROM 테이블명;예제 테이블 생성하기
먼저 실습에 사용할 테이블을 만들어 보겠습니다.
mysql> CREATE TABLE DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName varchar(20),
LastName varchar(20)
);
Query OK, 0 rows affected (0.67 sec)샘플 데이터 삽입
INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.
mysql> INSERT INTO DemoTable(FirstName, LastName) VALUES('John','Smith');
Query OK, 1 row affected (0.10 sec)
mysql> INSERT INTO DemoTable(FirstName, LastName) VALUES('David','Miller');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable(FirstName, LastName) VALUES('John','Doe');
Query OK, 1 row affected (0.13 sec)저장된 데이터 확인
SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> SELECT *FROM DemoTable;
실행 결과는 다음과 같습니다.
+----+-----------+----------+ | Id | FirstName | LastName | +----+-----------+----------+ | 1 | John | Smith | | 2 | David | Miller | | 3 | John | Doe | +----+-----------+----------+ 3 rows in set (0.00 sec)
줄바꿈 구분자를 적용한 GROUP_CONCAT 쿼리 실행
이제 이름과 성을 공백으로 연결하고, 각 레코드 사이를 줄바꿈 문자로 구분하는 쿼리를 실행해 보겠습니다.
mysql> SELECT GROUP_CONCAT(CONCAT_WS(' ', FirstName, LastName) SEPARATOR "\r\n") FROM DemoTable;실행 결과는 다음과 같습니다.
+-------------------------------------------------------------------+
| GROUP_CONCAT(CONCAT_WS(' ', FirstName, LastName) SEPARATOR "\r\n") |
+-------------------------------------------------------------------+
| John Smith David Miller John Doe |
+-------------------------------------------------------------------+
1 row in set (0.00 sec)결과가 한 줄로 보이는 이유는?
위 출력 결과를 보면 줄바꿈이 적용되지 않은 것처럼 모든 값이 한 줄에 나열되어 있습니다. 하지만 실제로는 문자열 내부에 줄바꿈 문자(\r\n)가 정상적으로 포함되어 있는 것입니다.
MySQL CLI(터미널)나 일부 클라이언트 도구는 결과를 표 형태로 출력하기 때문에 줄바꿈 문자를 시각적으로 표현하지 못할 뿐입니다. 데이터를 애플리케이션으로 가져오거나 파일로 내보내면 줄바꿈이 정상적으로 적용된 것을 확인할 수 있습니다.
줄바꿈 여부를 직접 확인하는 방법
결과값의 길이를 확인하면 줄바꿈 문자가 포함되었는지 검증할 수 있습니다.
mysql> SELECT LENGTH(GROUP_CONCAT(CONCAT_WS(' ', FirstName, LastName) SEPARATOR "\r\n")) FROM DemoTable;
-- 각 이름은 9~11자, 줄바꿈 2문자씩 포함되어 전체 길이가 계산됩니다.또는 CHAR(13, 10) 함수를 활용해 CR/LF 문자를 명시적으로 지정할 수도 있습니다.
SELECT GROUP_CONCAT(CONCAT_WS(' ', FirstName, LastName) SEPARATOR CHAR(13, 10)) FROM DemoTable;마무리 정리
GROUP_CONCAT()에서 줄바꿈 구분자는SEPARATOR "\r\n"또는SEPARATOR CHAR(13, 10)로 지정할 수 있습니다.- 터미널 출력에서는 줄바꿈이 보이지 않아도 실제 데이터에는 정상적으로 포함되어 있습니다.
- 웹 화면에 출력할 경우 HTML에서는
<br>태그로 변환하거나 CSS의white-space: pre-line;스타일을 활용하면 줄바꿈이 제대로 표시됩니다.
이처럼 GROUP_CONCAT의 줄바꿈 구분자는 올바르게 동작하고 있으며, 출력 환경의 특성만 이해하면 원하는 형태로 활용할 수 있습니다.