MySQL의 MAKE_SET() 함수는 주어진 숫자를 비트 단위로 해석하여, 각 비트 위치에 해당하는 문자열을 조합한 집합(set) 값을 반환하는 함수입니다. 이때 특정 비트가 1이라도 그 비트에 대응되는 문자열이 NULL이면 해당 문자열은 결과에 포함되지 않습니다.
특히 첫 번째 문자열(비트 0에 해당하는 문자열)이 NULL인 상태에서 비트 값이 1이면, 함수는 아무것도 반환하지 않고 빈 값을 돌려줍니다. 아래 예제를 통해 이 동작을 확인할 수 있습니다.
예제
mysql> Select MAKE_SET(1, NULL,'A','B'); +---------------------------+ | MAKE_SET(1, NULL,'A','B') | +---------------------------+ | | +---------------------------+ 1 row in set (0.00 sec)
결과 분석
위 쿼리에서 숫자 1은 이진수로 0001이며, 이는 첫 번째 문자열만 선택하겠다는 의미입니다. 그러나 첫 번째 문자열 자리에 NULL이 지정되어 있기 때문에, 비트가 1로 설정되어 있어도 실제로 반환할 문자열이 존재하지 않습니다.
따라서 MAKE_SET(1, NULL, 'A', 'B')는 빈 문자열을 반환하게 됩니다. 만약 두 번째 비트가 포함된 값(예: 3)을 사용했다면, 'A'가 결과 집합에 포함되었을 것입니다.
참고 사항
MAKE_SET() 함수는 다음과 같은 규칙으로 동작합니다.
- 첫 번째 인자는 비트 마스크 역할을 하는 정수입니다.
- 비트 0은 첫 번째 문자열, 비트 1은 두 번째 문자열과 대응됩니다.
- 비트가 1이더라도 대응되는 문자열이
NULL이면 그 문자열은 무시됩니다. - 모든 대응 문자열이
NULL이면 결과적으로 빈 값이 반환됩니다.
따라서 MAKE_SET()을 사용할 때는 각 비트 위치에 대응되는 문자열이 NULL이 아닌지 반드시 확인해야 원하는 결과를 얻을 수 있습니다.