Mặc định GROUP_CONCAT dùng dấu phẩy ',' làm phân tách. Để dùng ký tự xuống dòng (\n hoặc \r\n), phải chỉ định rõ trong mệnh đề SEPARATOR và lưu ý về escape chuỗi trong MySQL.
Tạo bảng và dữ liệu
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName VARCHAR(20),
LastName VARCHAR(20)
);
mysql> INSERT INTO DemoTable (FirstName, LastName) VALUES
('John', 'Smith'), ('David', 'Miller'), ('John', 'Doe');
Dữ liệu
mysql> SELECT * FROM DemoTable;
+----+-----------+----------+
| Id | FirstName | LastName |
+----+-----------+----------+
| 1 | John | Smith |
| 2 | David | Miller |
| 3 | John | Doe |
+----+-----------+----------+
Cú pháp đúng: SEPARATOR với chuỗi literal chứa escape
Trong MySQL, chuỗi literal trong ngoặc đơn '...' hoặc kép "..." hỗ trợ escape backslash. Để dùng \r\n (CRLF) hoặc \n (LF):
mysql> SELECT GROUP_CONCAT(
CONCAT_WS(' ', FirstName, LastName)
SEPARATOR '\r\n'
) FROM DemoTable;
Kết quả (hiển thị trên một dòng nhưng chứa ký tự xuống dòng thực tế)
+-------------------------------------------------------------------+
| GROUP_CONCAT(CONCAT_WS(' ', FirstName, LastName) SEPARATOR "\r\n") |
+-------------------------------------------------------------------+
| John Smith
David Miller
John Doe |
+-------------------------------------------------------------------+
Giải thích
CONCAT_WS(' ', FirstName, LastName): Nối FirstName + ' ' + LastName (WS = With Separator). Tự động bỏ qua NULL.SEPARATOR '\r\n': Phân tách các giá trị nối bởi CRLF (Windows newline). Dùng'\n'cho Linux/Unix.- Kết quả hiển thị trong client MySQL có thể không ngắt dòng trực quan, nhưng dữ liệu thực có ký tự
\r\n. Xuất ra file hoặc ứng dụng sẽ thấy đúng dòng mới.
Lưu ý quan trọng
- Nếu dùng
SEPARATOR '\\n'(double backslash) -> lưu trữ literal backslash + n, không phải newline. group_concat_max_lenmặc định 1024 byte. Dữ liệu lớn -> tăng:SET SESSION group_concat_max_len = 1000000;.GROUP_CONCATtrả vềVARBINARY/TEXT/BLOBtùy kiểu dữ liệu đầu vào và độ dài.