Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 백슬래시가 포함된 값('a\b')을 일치시키는 방법

RLIKE 연산자로 백슬래시 값 매칭하기

MySQL에서 'a\b'처럼 백슬래시가 포함된 문자열을 검색하려면 RLIKE(정규식 기반) 연산자를 사용하면 됩니다. 이때 가장 중요한 개념은 쿼리 안에 백슬래시를 몇 번 반복해서 작성해야 하는지 이해하는 것입니다. 아래 예제를 통해 쉽게 확인할 수 있습니다.

예제 테이블

'a\b'와 'a\\b' 값이 함께 저장되어 있는 다음 테이블을 살펴보겠습니다.

mysql> select * from backslashes;
+------+-------+
| Id   | Value |
+------+-------+
|    1 | 200   |
|    2 | 300   |
|    4 | a\\b  |
|    3 | a\b   |
+------+-------+
4 rows in set (0.10 sec)

백슬래시를 여러 번 반복해야 하는 이유

'a\\b'(백슬래시 두 개)와 같은 값을 매칭하려면 쿼리에 총 8개의 백슬래시를 작성해야 합니다. 그 이유는 다음과 같습니다.

  • 정규식 레벨에서 하나의 리터럴 백슬래시를 매칭하려면 백슬래시를 두 개(\\)로 이스케이프해야 하므로, 두 개의 리터럴 백슬래시를 비교하려면 먼저 두 배인 4개가 필요합니다.
  • 그런데 MySQL 클라이언트에서 데이터베이스로 문자열을 전달하는 과정에서 이스케이프 처리가 한 번 더 일어납니다. 즉, 클라이언트 단계와 데이터베이스 단계에서 각각 한 번씩, 총 두 번의 이중화가 발생합니다.

따라서 최종적으로 4 × 2 = 8개의 백슬래시를 사용해야 원하는 값을 정확히 매칭할 수 있습니다.

쿼리 실행 예제

mysql> Select * from backslashes where value RLIKE 'a\\\\\\\\b';
+------+-------+
| Id   | Value |
+------+-------+
|    4 | a\\b  |
+------+-------+
1 row in set (0.00 sec)

mysql> Select * from backslashes where value RLIKE 'a\\\\b';
+------+-------+
| Id   | Value |
+------+-------+
|    3 | a\b   |
+------+-------+
1 row in set (0.01 sec)

첫 번째 쿼리는 8개의 백슬래시를 사용해 'a\\b'를 정확히 매칭하고, 두 번째 쿼리는 4개의 백슬래시를 사용해 'a\b'를 매칭합니다. 이처럼 백슬래시 이스케이프 규칙만 정확히 이해하면 RLIKE 연산자로 특수문자가 포함된 값도 손쉽게 검색할 수 있습니다.