MySQL의 MAKE_SET() 함수는 첫 번째 인수로 전달된 숫자를 이진수 비트로 해석하고, 각 비트에 해당하는 위치의 문자열을 선택하여 쉼표(,)로 구분된 집합 형태의 문자열로 반환합니다. 여기서 첫 번째 문자열은 비트 0, 두 번째 문자열은 비트 1에 대응됩니다.
그렇다면 문자열 자리에 전달된 모든 값이 NULL이라면 어떤 결과가 나올까요? 이 경우 MAKE_SET() 함수는 선택할 수 있는 유효한 문자열이 없기 때문에 아무것도 반환하지 않습니다. 즉, 빈 문자열(empty string)을 결과로 돌려줍니다.
예제
mysql> Select MAKE_SET(2, NULL,NULL,NULL); +-----------------------------+ | MAKE_SET(2, NULL,NULL,NULL) | +-----------------------------+ | | +-----------------------------+ 1 row in set (0.00 sec)
위 예제에서 첫 번째 인수인 2는 이진수로 10이므로, 두 번째 비트(비트 1)에 해당하는 두 번째 문자열을 선택해야 합니다. 그러나 세 개의 문자열 인수가 모두 NULL이므로 결과에 추가할 값이 없고, 결국 함수는 빈 문자열을 반환합니다.
참고: 일부만 NULL인 경우
반면 일부 문자열만 NULL이라면, NULL이 아닌 문자열 중 해당 비트가 설정된 값들만 골라서 반환합니다.
mysql> Select MAKE_SET(5, 'a', NULL, 'c'); +-----------------------------+ | MAKE_SET(5, 'a', NULL, 'c') | +-----------------------------+ | a,c | +-----------------------------+ 1 row in set (0.00 sec)
5는 이진수로 101이므로 비트 0과 비트 2에 해당하는 첫 번째('a')와 세 번째('c') 문자열이 선택되며, 중간의 NULL은 결과에서 제외됩니다. 정리하면, 모든 문자열 인수가 NULL일 때만 MAKE_SET() 함수는 빈 문자열을 반환한다고 할 수 있습니다.