Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 BIT 필드에 GROUP_CONCAT() 사용 시 깨진 값이 반환되는 문제와 해결 방법

문제 상황

MySQL에서 BIT 타입의 열에 GROUP_CONCAT() 함수를 그대로 적용하면 의미를 알 수 없는 깨진 값(쓰레기 값)이 반환되는 경우가 있습니다. 이는 BIT 값이 문자열로 변환되는 과정에서 발생하는 현상입니다.

해결 방법

해결 방법은 아주 간단합니다. GROUP_CONCAT() 내부에서 해당 열에 +0을 더해주면 됩니다. 이렇게 하면 BIT 값이 숫자로 변환되어 정상적인 결과를 얻을 수 있습니다.

1. 테이블 생성

먼저 테스트용 테이블을 생성해 보겠습니다.

mysql> create table DemoTable1856
    (
    Id int,
    Value bit(1)
    );
Query OK, 0 rows affected (0.00 sec)

2. 데이터 삽입

INSERT 명령을 사용하여 테이블에 레코드를 추가합니다.

mysql> insert into DemoTable1856 values(101,1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1856 values(102,0);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1856 values(101,0);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1856 values(102,1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1856 values(101,0);
Query OK, 1 row affected (0.00 sec)

3. 전체 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select * from DemoTable1856;

실행 결과는 다음과 같습니다. BIT 타입 특성상 Value 열의 값이 화면에 제대로 표시되지 않는 것을 확인할 수 있습니다.

+------+-------+
| Id   | Value |
+------+-------+
|  101 |       |
|  102 |       |
|  101 |       |
|  102 |       |
|  101 |       |
+------+-------+
5 rows in set (0.00 sec)

4. 해결 쿼리 실행

이제 BIT 필드에 GROUP_CONCAT()을 적용하면서 +0을 더해 깨진 값 없이 정상적인 결과를 얻는 쿼리를 살펴보겠습니다.

mysql> select group_concat(Value+0) from DemoTable1856
    group by Id;

실행 결과는 다음과 같습니다. Id별로 BIT 값이 숫자 형태로 정확하게 집계된 것을 확인할 수 있습니다.

+-----------------------+
| group_concat(Value+0) |
+-----------------------+
| 1,0,0                 |
| 0,1                   |
+-----------------------+
2 rows in set (0.00 sec)

정리

BIT 타입 열에 GROUP_CONCAT()을 사용할 때는 반드시 +0 연산을 추가하여 값을 숫자로 변환해 주세요. 이 한 줄의 처리만으로 깨진 값 없이 원하는 결과를 얻을 수 있습니다.