MySQL에는 인자로 전달된 값들 중에서 특정 문자열을 검색하는 데 사용되는 함수가 여러 가지 있습니다. 그중 FIELD() 함수와 FIND_IN_SET() 함수는 비슷한 용도로 사용되지만, 동작 방식과 결과 처리에서 몇 가지 중요한 차이점이 있습니다.
1. 문자열 리스트 처리 방식의 차이
FIND_IN_SET() 함수는 하나의 문자열 리스트를 사용합니다. 이 리스트 자체가 하나의 문자열이며, 내부에 포함된 부분 문자열들은 쉼표(,)로 구분되어 있습니다.
반면 FIELD() 함수는 서로 다른 여러 개의 문자열들을 개별 인자로 전달받습니다. 그리고 검색하려는 문자열이 이 목록에 존재할 경우, 해당 문자열의 위치(인덱스 번호)를 반환합니다.
2. NULL 처리 방식의 차이
FIND_IN_SET() 함수는 검색 문자열 또는 문자열 리스트 중 어느 하나라도 NULL이면 결과로 NULL을 반환합니다.
반면 FIELD() 함수는 검색 문자열이 NULL일 경우 NULL을 반환하지 않고 0을 반환합니다. 즉, 일치하는 항목이 없는 것과 동일하게 처리됩니다.
예제
아래 예제를 통해 두 함수의 NULL 처리 차이를 직접 확인할 수 있습니다.
mysql> Select FIND_IN_SET(NULL,'Ram is a good boy') AS Result;
+--------+
| Result |
+--------+
| NULL |
+--------+
1 row in set (0.00 sec)
mysql> SELECT FIND_IN_SET('RAM',NULL) AS RESULT;
+--------+
| RESULT |
+--------+
| NULL |
+--------+
1 row in set (0.00 sec)
mysql> Select FIELD(NULL,'Ram','is','good','boy');
+-------------------------------------+
| FIELD(NULL,'Ram','is','good','boy') |
+-------------------------------------+
| 0 |
+-------------------------------------+
1 row in set (0.00 sec)
위 실행 결과에서 볼 수 있듯이, FIND_IN_SET()은 인자 중 하나가 NULL이면 NULL을 반환하는 반면, FIELD()는 검색 문자열이 NULL일 때 0을 반환합니다. 이러한 차이를 이해하고 있으면 상황에 맞는 적절한 함수를 선택하는 데 큰 도움이 됩니다.