MySQL에서 LIKE 연산자를 사용할 때 % 기호는 와일드카드(wildcard) 문자로 해석됩니다. 따라서 데이터 자체에 %가 포함된 레코드를 검색하려면 백슬래시(\)를 사용해 이스케이프 처리해야 합니다. 이 글에서는 예제를 통해 그 방법을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성하기
먼저 테이블을 생성합니다.
mysql> create table DemoTable742 (Value varchar(100));
Query OK, 0 rows affected (2.91 sec)
2. 레코드 삽입하기
insert 문을 사용해 테이블에 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable742 values('632535MIT');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable742 values('US%UK');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable742 values('56%78');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable742 values('%_1234');
Query OK, 1 row affected (0.09 sec)3. 전체 레코드 확인하기
select 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable742;
실행하면 다음과 같은 결과가 출력됩니다.
+-----------+
| Value |
+-----------+
| 632535MIT |
| US%UK |
| 56%78 |
| %_1234 |
+-----------+
4 rows in set (0.00 sec)
4. % 문자가 포함된 레코드 검색하기
LIKE 쿼리에서 % 문자 자체를 찾으려면 패턴 안에서 \%처럼 백슬래시를 앞에 붙여 이스케이프 처리하면 됩니다.
mysql> select *from DemoTable742 where Value LIKE '%\%%';
실행 결과 %가 포함된 레코드만 정상적으로 출력됩니다.
+--------+
| Value |
+--------+
| US%UK |
| 56%78 |
| %_1234 |
+--------+
3 rows in set (0.00 sec)
쿼리 패턴 분석
위에서 사용한 패턴 '%\%%'를 하나씩 나눠 보면 다음과 같습니다.
- 첫 번째 % : 임의의 문자열(0자 이상)과 매칭
- \% : 리터럴 % 문자와 매칭 (이스케이프 처리됨)
- 마지막 % : 이후에 오는 임의의 문자열과 매칭
즉, 값 중간 어디든 % 문자가 들어 있으면 해당 레코드가 검색 결과에 포함됩니다.
추가 참고 사항
_(언더스코어) 역시 한 글자를 대표하는 와일드카드이므로, 같은 방식으로 \_를 사용해 이스케이프할 수 있습니다. 또한 MySQL에서 NO_BACKSLASH_ESCAPES 모드가 활성화된 환경이라면 ESCAPE 절로 별도의 이스케이프 문자를 지정하는 방법도 활용할 수 있습니다.