2013-05-03 3 views
3

작동하지 않습니다,이 같은 쿼리를 사용 :정규 표현식이 제대로

SELECT * FROM `my_table` WHERE `name` REGEXP 'léon' 

이 요청은 OK입니다.

지금, 나는 문자열 léon 또는 leon 또는 lèon 모든 행을 검색해야하는, 그래서 시도 :

SELECT * FROM `my_table` WHERE `name` REGEXP 'l[éeè]on' 

이 쿼리가 작동하지 않습니다 ... 나는 오류가없는,하지만 결과. 아이디어가 있습니까?

+2

그것은 나를 위해 작동합니다 ... 어쩌면 버전일까요? 어떤 MySQL 버전을 실행하고 있습니까? – LeonardChallis

+0

만약 내가 SELECT * FROM'my_table'을 시도한다면'name' REGEXP 'lé [o] n', 괜찮습니다. 그래서 내가 생각하는 버전에는 문제가되지 않습니다. –

+0

피들에서 작동하지 않는 것으로 보입니다 - http://sqlfiddle.com/#!2/78eb95/3 – sgeddes

답변

0
docs:

바이트 현명한 방식으로 정규 표현식과 RLIKE 운영자 직장에서

, 그래서 그들은 하지 멀티 바이트 안전하고 멀티 바이트 문자 세트와 예기치 않은 결과가 발생할 수 있습니다. 또한이 연산자는 문자를 바이트 값과 비교하며 지정된 데이터 정렬로이 문자를 같음으로 처리하더라도 액센트 문자는 과 비교되지 않을 수 있습니다.

이렇게하면 멀티 바이트 문자를 처리 할 수 ​​있으므로 1 바이트 또는 2를 처리 할 수 ​​있습니다. 예를 들어 "사자"에서 일치하므로 완벽하지는 않지만 가까이 갈 수 있습니다.

REGEXP 'l.{1,2}on' 

당신이 시작을 지정하는 등

REGEXP 'l[éeè]on' 

가 종료되지 않기 때문에 당신이 정규 표현식은 MySQL의에서 작동하는 방법에 영향을 줄 수있는 또 다른 것은 끝에 와일드 카드가 내포되어 있다는 것입니다

REGEXP '^.*l[éeè]on.*$' 

과 일치합니다. 이는 예상 한 것보다 많은 것을 나타낼 수 있음을 의미합니다. 문제는 처음 언급 한 시나리오입니다.

관련 문제