FIELD() 함수의 인수로 전달되는 문자열 목록에 NULL과 다른 값들이 함께 조합되어 있으면 출력 결과에 상당한 변화가 발생합니다. 다음 예제를 통해 이를 자세히 살펴보겠습니다.
예제
mysql> Select FIELD('good','Ram','is','good','boy');
+---------------------------------------+
| FIELD('good','Ram','is','good','boy') |
+---------------------------------------+
| 3 |
+---------------------------------------+
1 row in set (0.00 sec)
위 출력 결과를 보면 검색 문자열 'good'의 인덱스 번호가 3으로 반환된 것을 확인할 수 있습니다. 그렇다면 이제 문자열 목록 중간에 NULL을 추가하면 어떻게 될까요? 결과는 다음과 같이 크게 달라집니다.
mysql> Select FIELD('good','Ram','is',NULL,'good','boy');
+---------------------------------------------+
| FIELD('good','Ram','is',NULL,'good','boy') |
+---------------------------------------------+
| 4 |
+---------------------------------------------+
1 row in set (0.00 sec)
결과 분석
목록에 NULL이 추가되자 'good'의 인덱스 번호가 3에서 4로 변경되었습니다. 이는 MySQL이 검색 문자열을 비교할 때 NULL도 유효한 목록 항목으로 간주하여 비교 대상에 포함시킨다는 의미입니다. 즉, NULL이 목록에 포함되면 해당 항목 역시 하나의 위치를 차지하게 되므로, 그 뒤에 오는 문자열들의 인덱스 번호가 하나씩 뒤로 밀리게 됩니다.
참고로 FIELD() 함수는 첫 번째 인수로 주어진 문자열이 나머지 문자열 목록 중 몇 번째 위치에 해당하는지를 반환하는 함수입니다. 만약 검색 문자열이 목록에 존재하지 않거나 검색 문자열 자체가 NULL이라면 0을 반환합니다. 따라서 실무에서 FIELD() 함수를 사용할 때는 NULL 처리가 정렬 순서나 조건 분기에 예상치 못한 영향을 줄 수 있음을 항상 염두에 두어야 합니다.