위 문제를 풀 때 흔히 LIKE 구문을 떠올리게 된다. 그런데 이름의 대소문자를 구분하지 않는다고 하면 LIKE에 어떤 조건을 붙여주어야 하는걸까? 궁금해서 아래와 같이 SQL을 달리해서 실행해보았다.
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE NAME LIKE '%EL%' AND ANIMAL_TYPE = 'Dog'
ORDER BY NAME
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE NAME LIKE '%el%' AND ANIMAL_TYPE = 'Dog'
ORDER BY NAME
위 코드와 아래 코드의 차이점은 LIKE 뒤에서 찾아볼 수 있다. 위는 '%EL%'로, 아래는 '%el%로 표현하였다.
두 코드를 실행한 결과는 놀랍게도 동일하다. '%El%'처럼 대문자와 소문자를 조합해서 쿼리를 짜도 결과는 똑같다. 이를 통해 아래와 같은 사실을 알 수 있다.
MYSQL에서 LIKE 구문의 조건은 대소문자를 구분하지 않는다.
그렇다면 MYSQL에서 LIKE 구문을 사용할 때 대소문자를 구분하는 방법은 무엇일까?
Binary 함수를 이용해서 코드를 아래와 같이 변경하면 대소문자를 구분하도록 할 수 있다.
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE NAME LIKE binary('%el%') AND ANIMAL_TYPE = 'Dog'
ORDER BY NAME
MYSQL에서 LIKE 구문 사용 시 대소문자를 구분하기 위해서는 binary 함수를 사용하면 된다.