문자 이스케이프 구덩이가 발생 메시지 같은 MySQL을

최근에 문제가 발생하면 같은 MySQL의 쿼리, 분명히 같은 문자열이 아니라 결과처럼, 많은 다시 후 정보를 찾기 위해, 그리고 마지막으로 문자열이 문제를 탈출 발견하고, MySQL의 LIKE 탈출 할 때 및 일반 문자 다른.

테스트에서 첫보기 :

1

4

5

6

(7)

mysql> SET @a='\';SELECT @a,@a LIKE '\\';

 

+----+----------------+

| @a | @a LIKE '\\' |

+----+----------------+

|   |              1 |

+----+----------------+

그것은 LIKE의로 탈출 ","\\ "볼 수"LIKE 이스케이프 문자열을 탈출 보통 조금 다른를 사용합니다.

나는 공식 문서, 이스케이프 문자의 해석을 확인 :

백 슬래시 파서에 의해 한 번에 제거되기 때문에 다시 패턴 일치가 이루어질 때이있다

단일 백 슬래시를 떠나는 것은에 대해 일치합니다.

MySQL은 자신의 파서는 하위 의의 이전 LIKE 결과의 패턴을 한 번 탈출합니다.

즉, "\\"의 예는 처음, 두 번째는 인 "\"로서 이스케이프위한 "."

문자 이스케이프 MySQL의 테스트에서 살펴 보자

1

4

5

6

(7)

mysql> SELECT '%','_';

+----+----+

| % | _ |

+----+----+

| % | _ |

+----+----+

1 row in set

아, 아무것도 탈출 "%"를 탈출되지 않고, ( "X", "B"는 대체 문자 등의 "X"로 탈출) "_." 등이 탈출했다. 나는 그렇게 두려워 MYSQL 목적이 LIKE 호환성을위한입니다.

LIKE 이스케이프 문자열, 두 배의 총, 처음에는 "%"와 "_"를 탈출 할 때 요약에서, 두 번째는 모든 탈출하지 않습니다. 이스케이프 특수 문자는 http://dev.mysql.com/doc/refman/5.1/en/string-literals.html#character-escape-sequences에서 찾을 수 있습니다

최초의 "에"\\ "교체로 LIKE 이스케이프 볼 수있다", 문자열의 나머지 "\"탈출하고 나머지 문자열 ","탈출. 일반적으로 만족하지 마십시오, "\"특별한 분석 등 눈에 보이지 않는 것입니다.

특수 문자 필터링과 같은 PHP 버전

1

function likeEscape($str) {

    return strtr($strarray('%'=>'\%''_'=>'\_''\'=>'\\\\'));

}

참고 마지막 이중 백 슬래시 백 슬래시 당신이 그것에 대해 생각, 주변, PHP에서 문자열을 변환하는 데, 사실, 팔에 조금 한 차례 네,하지만 필요가 돌았 다, 문제는 메시지를 남길 수있다

发布了29 篇原创文章 · 获赞 9 · 访问量 3万+

추천

출처blog.csdn.net/HAOXUAN168/article/details/104087348