>데이터 베이스 >MySQL 튜토리얼 >MySQL에서 LIKE에는 백슬래시 이스케이프가 필요하지만 =에는 백슬래시 이스케이프가 필요하지 않은 이유는 무엇입니까?

MySQL에서 LIKE에는 백슬래시 이스케이프가 필요하지만 =에는 백슬래시 이스케이프가 필요하지 않은 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-06 21:04:41903검색

Why Does MySQL Require Backslash Escaping for LIKE but Not for =?

MySQL에서 백슬래시 이스케이프: 등호(=) 연산자와 LIKE 연산자의 차이점 밝히기

MySQL에서 백슬래시() 문자 문자열 조작에 중요한 역할을 합니다. 등호(=) 연산자를 사용하는 경우 추가 백슬래시가 필요한 LIKE 연산자와 달리 백슬래시를 이스케이프 처리할 필요가 없습니다.

다음 쿼리를 고려하세요.

(SELECT * FROM `titles` WHERE title = 'test\')
UNION ALL
(SELECT * FROM `titles` WHERE title LIKE 'test\\')

이 쿼리는 두 조건이 모두 일치하고 동일한 행을 반환한다는 것을 보여줍니다. 두 번째 조건에 추가 백슬래시가 포함되어 있어 직관에 어긋나는 것처럼 보일 수 있습니다.

(=)에는 이스케이프가 필요하지 않지만 LIKE에는 필수인 이유는 무엇입니까?

답은 LIKE 연산자의 고유한 동작에 있습니다. 등호(=) 연산자와 달리 LIKE는 백슬래시를 이스케이프 문자로 사용합니다. 즉, LIKE 패턴의 백슬래시는 문자 그대로 일치하려면 두 배가 되어야 합니다.

MySQL은 두 단계로 이 두 배를 수행합니다.

  • 파서에 의해 한 번은 백슬래시 하나를 제거합니다.
  • 다시 패턴 일치가 이루어지면 단일 백슬래시를 남겨두고 string.

따라서 첫 번째 조건(제목 = 'test')에서 MySQL은 자동으로 백슬래시를 이스케이프하여 일치 항목을 찾습니다. 그러나 두 번째 조건(제목 LIKE 'test\')에서는 두 라운드의 백슬래시 제거를 보상하기 때문에 추가 백슬래시가 필요합니다.

LIKE 패턴에 대한 사용자 정의 이스케이프 문자

특정 시나리오에서는 LIKE 패턴에 대해 다른 이스케이프 문자를 사용하는 것이 바람직할 수 있습니다. 이는 아래와 같이 ESCAPE 키워드를 사용하여 달성할 수 있습니다.

SELECT * FROM `titles` WHERE title LIKE 'test\' ESCAPE '|'

ESCAPE 키워드를 지정하면 '|' 문자는 기본 '' 대신 이스케이프 문자가 됩니다. 이를 통해 백슬래시 문자를 두 배로 사용하지 않고도 문자 그대로 LIKE 패턴으로 사용할 수 있습니다.

위 내용은 MySQL에서 LIKE에는 백슬래시 이스케이프가 필요하지만 =에는 백슬래시 이스케이프가 필요하지 않은 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.