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

문자열 자리에 모두 NULL이 있을 때 MySQL MAKE_SET() 함수의 반환 값은 무엇일까?

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() 함수는 빈 문자열을 반환한다고 할 수 있습니다.