2011-09-08 3 views
2

내 쿼리는 SELECT * FROM PMT_PROJECT WHERE PROJECT_CODE LIKE '%A3\7\2011%' AND COMPANY_ID=14입니다. PROJECT_CODE 열에 정확한 일치 레코드가 포함되어 있지만 위의 쿼리에서 MySql db에서 레코드를 가져올 수 없습니다. 위의 쿼리에서 실수 나 위의 레코드를 가져 오는 방법을 제안하면 \ 특수 문자에 관한 구문을 수정하십시오.mysql과 마찬가지로 특수 문자

+0

중복 가능성 [MySQL의에서 특수 문자를 탈출하는 방법 (http://stackoverflow.com/questions/ : 말 그대로 백 슬래시 문자를 사용하려는 경우, 당신은이 쿼리에 대한 또 다른 이스케이프 문자를 정의해야 881194/how-to-escape-special-character-in-mysql) – ajreal

+0

내 쿼리가 레코드를 가져올 수없는 오류를 발생시키지 않고 위 변경이 % A3/7/2011 % '와 같다고 가정하고 레코드가 있으면 내 db 안에 그때 그것은 레코드를 가져올 것입니다 – subodh

답변

7

mysql에서는 백 슬래시가 어렵습니다. ,

INSERT INTO mytable (field1) VALUES ('ASDFA3\\7\\2011QWER'); 

그러나 LIKE 명령으로, 이스케이프는 문자 그대로 표현하는 데 필요한 : 난 그냥 당신이 하나의 탈출 (두 개의 백 슬래시)를 수행 mysql 클라이언트에서 직접 테스트를 실행하고, 그 필드를 추가 발견 그래서 당신은 문 (네 개의 백 슬래시)를 두 번 탈출해야합니다

SELECT * FROM mytable WHERE field1 LIKE '%A3\\\\7\\\\2011%'; 

는 응용 프로그램 계층에 대한 그 이스케이프 필요에 추가하고 꽤 혼란 스러울 수 있습니다.

SET SESSION sql_mode='NO_BACKSLASH_ESCAPES'; 
SELECT * FROM mytable WHERE field1 LIKE '%A3\7\2011%'; 

EDIT (감사 lucek) : 또 다른 대안은 'NO_BACKSLASH_ESCAPES'모드를 사용하는 것입니다

SELECT * FROM mytable WHERE field1 LIKE '%A3_7_2011%'; 

:

또는를 보존하는 대안은 단일 문자 와일드 카드를 사용하는 것입니다 현재 sql_mode :

SET @temp_sql_mode = @@SESSION.sql_mode; 
SET SESSION sql_mode = CONCAT_WS(',', @@SESSION.sql_mode, 'NO_BACKSLASH_ESCAPES'); 
-- YOUR_SELECT_GOES_HERE; 
SET SESSION sql_mode = @temp_sql_mode; 
+0

고마워 덕분에 나를 도왔습니다 .... – subodh

+0

이 세션을 실행 한 후 sql_mode = 'NO_BACKSLASH_ESCAPES'; SET SESSION sql_mode를 그대로 설정하는 방법. – subodh

+0

그냥'SET SESSION sql_mode = ''; –

0

백 슬래시는 MySQL의 표준 이스케이프 문자입니다.

SELECT * 
FROM PMT_PROJECT 
WHERE PROJECT_CODE LIKE '%A3\7\2011%' ESCAPE '|' AND COMPANY_ID=14 
+0

"ESCAPE '문자' '문서를 찾으려고했으나 아무 것도 생각 나지 않았습니다. ESCAPE가 설명 된 MySQL 문서를 가르쳐 주시겠습니까? – matt

+0

http://dev.mysql.com/doc/refman/5.5/en/string-comparison-functions.html –