알다시피, 두 함수 모두 제공된 인수에서 문자열을 검색하는 데 사용되지만 다음과 같이 두 함수 사이에 몇 가지 중요한 차이점이 있습니다.
- FIND_IN_SET() 함수는 쉼표로 구분된 하위 문자열을 포함하는 문자열 자체인 문자열 목록을 사용합니다. 반면, LOCATE() 함수는 하위 문자열이 있는 경우 처음 나타나는 위치를 찾는 문자열을 포함합니다.
- LOCATE() 함수에서 위치에 대한 선택적 인수를 제공하여 검색 시작점을 관리할 수 있습니다. 반면, FIND_IN_SET() 함수의 경우 MySQL은 이러한 종류의 유연성을 제공하지 않으며 검색은 기본적으로 첫 번째 문자열부터 시작합니다.
- 정수의 경우 FIND_IN_SET()이 LOCATE() 함수보다 훨씬 적합합니다. 다음 예를 통해 이해할 수 있습니다.
예시
mysql> Select IF(LOCATE(2,'10,11,12,13') > 0,1,0) As result; +--------+ | result | +--------+ | 1 | +--------+ 1 row in set (0.05 sec) mysql> Select IF(FIND_IN_SET(2,'10,11,12,13') > 0,1,0)As Result; +--------+ | Result | +--------+ | 0 | +--------+ 1 row in set (0.00 sec)
위 예제의 결과 집합에서 LOCATE() 함수는 인수에 문자열이 없기 때문에 2라도 1을 반환함을 알 수 있습니다. 하지만 FIND_IN_SET() 함수는 정답인 0을 반환합니다.