>  기사  >  백엔드 개발  >  MySQL이 LIKE 쿼리에서는 백슬래시를 이스케이프하기 위해 이중 백슬래시를 요구하지만 Equals(=) 쿼리에서는 그렇지 않은 이유는 무엇입니까?

MySQL이 LIKE 쿼리에서는 백슬래시를 이스케이프하기 위해 이중 백슬래시를 요구하지만 Equals(=) 쿼리에서는 그렇지 않은 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-02 05:22:02530검색

Why Does MySQL Require Double Backslashes to Escape a Backslash in LIKE Queries But Not in Equals (=) Queries?

MySQL의 슬래시 이해() 쿼리에서 이스케이프 처리

MySQL에서는 백슬래시()를 포함한 특수 문자를 이스케이프하는 것이 일반적인 관행입니다. , 해석 충돌을 방지하기 위한 쿼리에서. 그러나 백슬래시와 관련하여 등호 연산자(=)와 LIKE 연산자의 동작을 비교할 때 흥미로운 예외가 발생합니다.

등호 연산자(=)

등호 연산자의 경우 검색어 내에서 백슬래시를 이스케이프 처리하기 위해 추가 백슬래시가 필요하지 않습니다. 예를 들어, 다음 쿼리는 제목 열에 "test" 값이 포함된 행을 검색합니다.

SELECT * FROM `titles` WHERE title = 'test\';

MySQL 파서는 검색어의 백슬래시를 자동으로 리터럴 문자로 해석하므로 검색에 성공합니다.

LIKE 연산자

equal 연산자와 달리 LIKE 연산자에는 검색어에서 백슬래시를 이스케이프 처리하기 위해 추가 백슬래시가 필요합니다. 이는 LIKE 연산자가 패턴 일치를 수행하고 백슬래시가 SQL에서 기본적으로 이스케이프 문자로 작동하기 때문입니다. 따라서 다음 쿼리는 이전 쿼리와 동일한 행을 검색합니다.

SELECT * FROM `titles` WHERE title LIKE 'test\\';

이 쿼리에서 이중 백슬래시는 검색어의 단일 백슬래시가 문자 그대로 백슬래시 문자로 해석되도록 합니다.

설명

이 동작의 이유는 MySQL이 LIKE 패턴을 처리하는 방식에 뿌리를 두고 있습니다. 파서는 처음에 검색어에서 백슬래시를 제거합니다. 그러나 이후에 패턴 일치를 수행하면 백슬래시가 다시 한 번 제거됩니다. 그러면 패턴과 일치하는 단일 백슬래시가 남습니다. 백슬래시가 리터럴 문자로 처리되도록 하려면 추가 백슬래시가 필요합니다.

이스케이프 문자 변경

MySQL을 사용하면 다른 이스케이프를 지정할 수 있습니다. ESCAPE 절을 사용하는 LIKE 패턴의 문자입니다. 예를 들어 다음 쿼리는 파이프(|) 문자를 이스케이프 문자로 사용합니다.

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

이 예에서 검색어의 단일 백슬래시는 앞에 지정된 이스케이프 문자가 있으므로 문자 그대로 해석됩니다. .

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

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