2009-10-18 2 views
2

어떻게 발음 구별 부호와 분음 부호를 구분,diacritic insensitive mysql search?

전이 페르시아어 문자열을해야합니까

هواى بر آفتاب بارز

هواى بر آفتاب بارز MYSQL에서 제거 분음 부호와 동일하지 않습니다

발음 구별을 무시하도록 mysql에 지시하거나 수동으로 필드의 모든 발음 구별 기호를 제거해야합니까?

답변

1

대소 문자를 구분하지 않는 문제와 비슷합니다.

SELECT * FROM blah WHERE UPPER(foo) = "THOMAS" 

비교하기 전에 두 문자열을 모두 발음 구분이 필요없는 것으로 변환하십시오.

+0

(SQL에서 발음 구별 부호를 제거하는 방법을 모르겠다. 아마도 다른 사람이 도울 수 있겠는가?) – Artelius

+0

실제로 대소 문자를 구분하거나 감도를 낮추는 것보다 조금 복잡합니다. 소프트웨어가 특정 스크립트 (MySQL이 페르시아어에 대해 갖고 있지 않은 것)에 대한 지원을 포함하지 않는 한 당신은 운이 없다. 또는 당신을 위해 사용자 정의 함수를 작성하는 작업을하고 있습니다. 어느 쪽이든 귀엽지 않을거야. – Joey

0

MySQL Character Set Support을 모두 읽고 귀하의 질문에 대한 답변이 이미 없는지 확인하셨습니까? 특히 데이터 정렬을 이해해야합니다.

I 추측 당신

+0

http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html에는 히브리어의 비슷한 문제를 다루는 맨 아래에 의견이 있습니다. MySQL에는 문제가 있지만 데이터 정렬에 관계없이 문제가 있습니다. 페르시아어 문제는 비슷할 수 있습니다. – Joey

0

쿼리는 일반적으로 라틴어 조회를 위해 트릭을 수행하기 전에

set names 'utf8' 

설정에 대한 utf8_general_ci를 사용하는 것이 옳은 일을 할 수 있다는 것입니다. 이것이 아랍어에서도 잘 작동하는지 잘 모르겠습니다.

2

utf8 (utf8_general_ci)을 사용하고 발음 구별 부호없이 아랍어 검색이 작동하지 않거나 민감하지 않거나 제대로 작동하지 않습니다.

16 진수를 사용하여 분음 부호를 포함하거나 포함하지 않고 문자를 살펴 보았습니다. mysql과 같이 두 개의 별개 문자로 간주됩니다.

저는 발음 구획을 필터링하는 동안 16 진수를 사용하고 단어를 검색하기 위해 많은 단어를 바꾸려고합니다.

SELECT arabic_word FROM Word 
WHERE 
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(HEX(REPLACE(
arabic_word, "-", "")), "D98E", ""), "D98B", ""), "D98F", ""), "D98C", 
""),"D991",""),"D992",""),"D990",""),"D98D","") LIKE ?', '%'.$search.'%' 

진수 형식의 값이 우리가 필터링 할 분음 부호는 다음과 같습니다

내 솔루션

아랍어 단어에 대한 문자를 구분 검색을해야합니다. 못생긴하지만 다른 anwser를 찾지 못했습니다.

0

내가 왔어요 깨끗한 솔루션입니다 :

SELECT arabic_word 
FROM Word 
WHERE (arabic_word REGEXP '{$search}' OR SOUNDEX(arabic_word) = SOUNDEX('{$search}')); 

은 내가 SOUNDEX 함수의 비용을 확인하지 않았습니다. 나는 이것이 작은 테이블을위한 것이지만 큰 데이터 셋을위한 것이 아닐 것이라고 생각한다.

+1

이렇게하면 더 잘됩니다. SET NAMES utf8; SELECT arabic_word FROM Word 어디에서 'arabic_word LIKE'{$ search} '; 저는 REGEXP를 사용하곤 합니다만,이 경우 LIKE가 키입니다. 읽어야 할 항목 : http://stackoverflow.com/questions/3304464/mysql-diacritic-insensitive-search-spanish-accents – Marcos