2016-07-17 1 views
2

예를 들어, 클래스 문자 Ara digit [٩-٠] .. 모든 자릿수를 생성하고 싶습니다.
해당 유니 코드 [U+0660-U+0669], 나는 노력이 :이 오류를 얻을RegExp를 사용하여 MySQL에서 아랍어 문자 클래스를 만드는 방법은 무엇입니까?

Select * FROM employees WHERE ID REGEXP [\u{0660}-\u{0669}]; 

# 1064 - 당신은 당신의 SQL 구문에 오류가 있습니다; '[- u는 {0669} \ U {0660} \] LIMIT 0, 25'라인 1 "

+0

어떤 향기를 사용하고 있습니까? – Shafizadeh

+1

또한 코드가 작동하지 않는 방법을 자세히 설명 할 수 있습니까? 당신은 무엇을 기대하고 있었고 실제로 무슨 일이 일어 났습니까? 예외가 발생하면 발생한 행을 게시하고 예외 세부 사항을 게시하십시오. 이 세부 정보를 입력하거나 편집하지 않으면 도움이되지 않을 수 있습니다. –

+1

정규식을 작은 따옴표로 문자열 리터럴로 넣어야합니다. – trincot

답변

2

https://dev.mysql.com/doc/refman/5.7/en/regexp.html에서이

을 말한다 근처 사용할 수있는 권리 구문에 대한 MySQL 서버 버전에 해당하는 설명서를 확인

경고

바이트 현명한 방식으로 정규 표현식과 RLIKE 운영자 작업, 그래서 그들은 안전 다중 바이트와 멀티 바이트 문자 집합에 예기치 않은 결과가 발생할 수 없습니다이다. 또한, 이러한 연산자는 자신의 바이트로 문자를 비교 값과 강조된 문자 주어진 데이터 정렬이 그것들을 동일하게 취급하더라도 짝수는 동일한 값인 과 비교되지 않을 수 있습니다. 당신이 정규 표현식에 Ã를 사용하는 경우, 그것은 (16 진수)에 2 바이트 C383와 같은 2 바이트 UTF8 코드를 치료하는 것입니다

. 이것이 당신에게 '올바른'답을 주었다면, 그것은 디자인보다는 운이 더 많을 것입니다.

이가하는 일 :

mysql> SELECT '١' REGEXP '[٩-٠]'; 
+-----------------------+ 
| '١' REGEXP '[٩-٠]' | 
+-----------------------+ 
|      1 | 
+-----------------------+ 

하지만, 그것은 단지 우연의 일치입니다. 정규 표현식은 [x0-x9]과 같습니다. 여기서 x는 D9 바이트이고, 0은 A0이고 9는 A9입니다. 그러나 정규 표현식은 당신이 원하는 바가 아니다 "모든 문자 x, 또는 0x, 또는 9 사이

힘 '모든'아랍어에 대한 일 :. REGEXP UNHEX('5BD82DDD5D'),하지만 '모든'때문에 16 진수 D8부터 DD까지 시작하십시오. (그러나 그 범위 내에 다른 것이있을 수 있습니다.) 또한, "문자열에 아랍어 문자가 포함되어 있습니까? 문구 나 글자의 일부와 같이 더 복잡한 것은 사용할 수 없습니다.

숫자 범위로 돌아 가기. D9 16 진수를 확인하는 것은 백분율 기호, 위 첨자 문자 및 기타 문자를 포함하기 때문에 안전하지 않습니다. 이 일 : REGEXP UNHEX('D95BA02DA95D') 일 수 있습니다.

경고 :이 답변에서 제가 말한 대부분은 테스트되지 않았습니다. 나는 경험이없는 영역에서 해결책을 고안하고있다 (REGEXP와 utf8).

+0

이 예제를 테스트했습니다 : CREATE TABLE namTst (ID INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR (20)); INSERT INTO namTst (ID, 이름) VALUES (NULL, '스미스'), (NULL, 'Ýrmada'), (NULL, '슈미트'), (NULL, 'Clingon'), (NULL, 'Dalek'), (NULL, '부시'), (NULL, '번즈'), (NULL, 'Builth'), (NULL, 'Thomas'); –

+0

SELECT * FROM'namtst' WHERE 이름 REGEXP '[À-Õ]'; 질의는 Ý가 집합 '[À-Õ]'을 벗어 났음에도 불구하고 containt " 'Ý"을 반환합니다. –

+0

catch하고 싶은 문자열을 몇 개 포함하면 건너 뛸 것입니다. –

관련 문제