ESCAPING이란?
- 원래 특정 의미('임의의 길이를 가진 문자열')를 나타내던 문자(ex:%)를 그 특정 의미가 아니라, 일반적인 문자처럼 취급하는 행위
- 어떤 문자가 그것에 부여된 특정한 의미, 기능으로 해석되는 게 아니라 그냥 단순한 문자 하나로 해석되도록 하는 것
ESCAPING
- 기호: 따옴표('), 퍼센트(%) 등 기호를 ESCAPING하려면
역슬래시(\)
사용 - 대소문자: 소문자만 지정되도록 하려면
BINARY
를 사용
예시
1) 기호 - 백슬래시(\)
활용
SELECT
id, name, email, age
FROM
member
WHERE
address LIKE '%%%'
-- 결과: 모든 데이터 출력
[문제 발생]
- %이 포함된 데이터만 필터링해서 조회하고 싶으나 모든 데이터가 출력됨
[원인]
- %가 정규표현식으로 인식되어 모든 데이터가 포함됨
- 임의의 길이를 가진 문자열을 나타내는 것으로 해석되어버림
[해결]
SELECT
id, name, email, age
FROM
member
WHERE
address LIKE '%\%%'
-- 결과: 문자 %가 포함된 데이터 출력
2) 대소문자 - BINARY
활용
SELECT
*
FROM
test
WHERE
sentence LIKE '%g%'
-- 결과: sentence 데이터중 대소문자 모두 포함되어 조회됨(G,g)
[문제 발생]
- 소문자g가 포함된 데이터만 필터링해서 조회하고 싶으나 대문자 G가 포함된 데이터까지 출력됨
[원인]
- Table collation 설정이 대소문자를 구분하지 않도록 설정(case-insensitive) 되어 있음
- MySQL 설정을 바꾸지 않고 조회할 수 있어야 팀원간 혼선이 발생하지 않음
[해결]
SELECT
*
FROM
test
WHERE
sentence LIKE BINARY '%g%'
-- 결과: sentence 데이터중 소문자만 포함되어 조회됨(g)
'DA Study > TIL' 카테고리의 다른 글
[TIL] 재귀 쿼리 (Recursive CTE) # MySQL # SQL (0) | 2025.04.06 |
---|---|
[TIL] 리스트에서 요소 개수 카운트하기, 문자열 길이 반환 함수(CHAR_LENGTH) 활용 #SQL #MySQL (0) | 2025.03.18 |
[TIL] 윈도우 함수에서 ROWS로 특정 범위내 데이터 지정하기 #SQL #SQLite #solvesql (0) | 2025.03.06 |
[TIL] CASE WHEN을 활용해 SELECT절에서 데이터 필터링하기 #SQL #SQLite #solvesql (0) | 2025.03.02 |
[TIL] 윈도우 함수 DENSE_RANK()를 활용한 TOP N 데이터 추출하기 #SQL #SQLite #solvesql (0) | 2025.02.26 |