>  기사  >  백엔드 개발  >  MySQL의 WHERE 및 LIKE 절에서 슬래시를 다르게 이스케이프해야 하는 이유는 무엇입니까?

MySQL의 WHERE 및 LIKE 절에서 슬래시를 다르게 이스케이프해야 하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-01 20:10:02339검색

Why Do I Need to Escape Slashes Differently in MySQL's WHERE and LIKE Clauses?

MySQL의 WHERE 및 LIKE 절에 대해 슬래시()를 다르게 처리하는 이유는 무엇입니까?

MySQL에서 쿼리 내에서 슬래시()를 처리하면 혼란스러워. 다음 쿼리를 고려하십시오.

<code class="sql">(SELECT * FROM `titles` where title = 'test\')
UNION ALL
(SELECT * FROM `titles` where title LIKE 'test\\')</code>

LIKE 절을 사용하는 두 번째 쿼리에는 "test"에서 원래 슬래시를 이스케이프하기 위해 추가 백슬래시가 필요할 것으로 예상할 수 있습니다. 그러나 결과에 따르면 두 쿼리 모두 제목이 "test"인 동일한 행을 성공적으로 반환한 것으로 나타났습니다.

WHERE 및 LIKE 절에 이스케이프 문자를 사용하는 MySQL의 동작 때문에 불일치가 발생합니다. WHERE 절에서 백슬래시는 이스케이프 문자 역할을 하여 특수 문자가 문자 그대로 해석되지 않도록 보호합니다. 반면, LIKE 절에서는 백슬래시가 기본 이스케이프 문자이므로 검색 패턴 내에서 다른 문자를 이스케이프할 수 있습니다.

LIKE에 대한 MySQL 매뉴얼에 명시된 대로:

따라서 "test"의 백슬래시는 WHERE 절을 구문 분석하는 동안 자동으로 이스케이프됩니다. LIKE 절이 의도한 이스케이프 시퀀스와 일치하도록 명시적으로 두 배로 늘려야 합니다("테스트\").

또는 다음 수정된 쿼리에 표시된 대로 LIKE에 대해 다른 이스케이프 문자를 지정할 수 있습니다.

<code class="sql">SELECT * FROM `titles` WHERE title LIKE 'test\' ESCAPE '|'</code>

백슬래시를 이스케이프 문자인 파이프 문자로 바꾸면 백슬래시를 중복하지 않고도 리터럴 "test"를 정확하게 검색할 수 있습니다.

위 내용은 MySQL의 WHERE 및 LIKE 절에서 슬래시를 다르게 이스케이프해야 하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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