[SQL] MYSQL에서 LIKE 구문은 대소문자를 구분할까?

전도운·2024년 6월 30일
0

보호소에 돌아가신 할머니가 기르던 개를 찾는 사람이 찾아왔습니다. 이 사람이 말하길 할머니가 기르던 개는 이름에 'el'이 들어간다고 합니다. 동물 보호소에 들어온 동물 이름 중, 이름에 "EL"이 들어가는 개의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 단, 이름의 대소문자는 구분하지 않습니다. (프로그래머스 코딩테스트 연습문제)

위 문제를 풀 때 흔히 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 함수를 사용하면 된다.

profile
의미 있는 한걸음을 추구합니다.

0개의 댓글