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

MySQL SET 컬럼 값을 정수 오프셋 목록으로 조회하는 방법

개요

MySQL의 SET 데이터 타입은 미리 정의된 문자열 목록 중 하나 이상의 값을 저장할 수 있는 특수한 컬럼 타입입니다. 내부적으로 각 요소가 비트(bit) 단위로 매핑되어 저장되기 때문에, MAKE_SET() 함수를 활용하면 SET 컬럼의 값을 정수 오프셋 목록 형태로 손쉽게 변환하여 조회할 수 있습니다.

예제 테이블 생성

실습을 위해 먼저 다음과 같이 'set_testing' 테이블을 생성합니다.

mysql> Create table set_testing( id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, col SET('ABC','ABD','GHF') NOT NULL);
Query OK, 0 rows affected (0.08 sec)

테스트 데이터 입력

이제 SET 컬럼에 숫자 형태의 비트값을 삽입합니다. MySQL은 입력된 정수를 해당 비트 위치의 문자열 조합으로 자동 변환하여 저장합니다.

mysql> Insert into set_testing (col) values('1');
Query OK, 1 row affected (0.06 sec)

mysql> Insert into set_testing (col) values('2');
Query OK, 1 row affected (0.06 sec)

mysql> Insert into set_testing (col) values('3');
Query OK, 1 row affected (0.02 sec)

mysql> Insert into set_testing (col) values('4');
Query OK, 1 row affected (0.02 sec)

저장된 데이터를 확인하면 다음과 같습니다.

mysql> Select * from set_testing;
+----+---------+
| id | col     |
+----+---------+
| 1  | ABC     |
| 2  | ABD     |
| 3  | ABC,ABD |
| 4  | GHF     |
+----+---------+
4 rows in set (0.00 sec)

MAKE_SET() 함수로 정수 오프셋 목록 조회하기

SET 컬럼 값에 0을 더하면(+0) 해당 값이 정수형 비트마스크로 변환됩니다. 이 값을 MAKE_SET() 함수의 첫 번째 인자로 전달하면, 설정된 비트에 대응하는 문자열들이 콤마로 구분된 목록으로 반환됩니다.

mysql> Select MAKE_SET(col+0,'1','2','3') as output from set_testing;
+--------+
| output |
+--------+
| 1      |
| 2      |
| 1,2    |
| 3      |
+--------+
4 rows in set (0.00 sec)

결과 해석

  • 'ABC' → 비트값 1 → 출력 '1'
  • 'ABD' → 비트값 2 → 출력 '2'
  • 'ABC,ABD' → 비트값 1+2=3 → 출력 '1,2'
  • 'GHF' → 비트값 4 → 출력 '3'

이처럼 MAKE_SET() 함수와 정수 변환(+0)을 조합하면, SET 컬럼에 저장된 문자열 조합을 정수 오프셋 기반의 목록으로 간편하게 변환할 수 있습니다. 이 방식은 SET 값을 애플리케이션에서 배열 형태로 처리해야 하거나, 비트 연산 기반의 필터링 로직을 구현할 때 특히 유용합니다.