2012-02-04 4 views
0

MySQL의 테이블에있는 필드 (sample_field) 중 하나 고려 "LIKE"키워드로 검색 할 수없는 탈출 "당신의 \ '의 데이터", 등 나는MySQL은,이 문자열 필드가

과 같은 테이블을 쿼리 할 때 SELECT * FROM sample_table WHERE sample_field = "your\'s data"

과도 같은 위의 쿼리의 모두는 sample_field는 "당신의 \ '의 데이터"

같은 값을 가진다하더라도, 0 행을 반환

SELECT * FROM sample_table WHERE sample_field = "your's data"

긴 검색 후 내 검색이 매우 잘 작동

SELECT * FROM sample_table WHERE sample_field = "your\\\'s data"

될 것을 알게되었습니다. 하지만

SELECT * FROM sample_table WHERE sample_field LIKE "your\\\'s data"

가 작동하지 않습니다. 따라서 제품이나 카테고리를 따옴표 (예 : '귀하의 데이터')로 검색하려면 사이트 검색에서와 이드 카드 패턴 ('%')을 사용하여 LIKE 키워드를 사용해야합니다.

지금 나는이

http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html#operator_like에 주어진 SELECT * FROM sample_table WHERE sample_field LIKE "your\\\\'s data"

처럼하려고하면, 그것은 잘 작동하는지 답을 발견했다.

하지만 이것을 달성하기 위해 왜이 백 슬래시가 필요한지 알려주세요. 사전에

감사

+1

Sidenote, 나는 데이터베이스에 백 슬래시가 없어야한다고 생각합니다 ... –

+0

왜 데이터베이스에 백 슬래시가 있습니까? 이것이 내가 가비지 데이터라고 부르는 것입니다. – deceze

답변

0

은 다음과 같이 그것을 시도 :

WHERE sample_field = "your\\'s data" 

: 당신이 리터럴 백 슬래시가 되길 원한다면

... WHERE sample_field = 'your\'s data' 
3

당신은, 이스케이프 백 슬래시를 이스케이프해야합니다 그러나 실제로, 처음에 데이터베이스에 백 슬래시가있는 것은 실수입니다. 대신이를 수정하십시오.

+0

아마 실수 일 경우 +1, 일반적으로 마술 따옴표와 같은 잘못된 입력 처리의 징후. 추신. 큰 따옴표는 ANSI SQL에서 다른 의미를 가지므로 문자열 상수에 작은 따옴표를 사용하십시오. – bobince

+0

작은 따옴표에 해당하면 아포스트로피를 피하기 위해 세 개의 백 슬래시가 필요합니다. :) – deceze

+0

친애하는 deceze,'어디 sample_field = "귀하의 \\의 데이터는"', 거기에'당신 sample_field = "귀하의 \\의 데이터"'로 줄 필요가 작동하지 않습니다. 그러나'where sample_field LIKE "% your \\\의 데이터 %"'가 잘 작동하지 않습니다. –

1

MySQL은 문자열에서 C 이스케이프 구문 (예 : "\ n"을 개행 문자로 사용)을 사용하기 때문에 LIKE 문자열에서 사용하는 "\"를 두 번 사용해야합니다. 예를 들어, "\ n"을 검색하려면 "\ n"으로 지정하십시오. "\"를 검색하려면 "\\"로 지정하십시오. 이것은 백 슬래시가 파서에 의해 한 번 제거되고 패턴 일치가 수행 될 때 다시 백 슬래시가 매치되도록 남겨두기 때문입니다.