2012-06-11 5 views
2

아랍어 텍스트가있는 테이블이 있습니다. 이 개 독특한 행이 있습니다아랍어 텍스트 복수 결과 ​​

اس
اس

첫 번째는 다음 문자로 구성             0x0627, 0x0650, 0x0633 두 번째는 다음 문자로 구성
: 0x0627 , 0x064F, 0x0633

이 두 가지 중 하나를 쿼리하면 둘 다 표시됩니다. 이것은 명령 행과 phpmyadmin을 사용하여 발생합니다. 다음은 내가 검색어를 입력 한 내용입니다.

SET NAMES utf8;
선택 urdu에서 음역 urdu LIKE 'اس';

의견이 있으십니까?

+1

데이터 정렬이 'utf8_bin'으로 설정되어 있습니까? 그렇지 않으면 MySQL은 같은 문자의 다른 케이싱 일 뿐이므로 같은 문자로 보게됩니다. – Esailija

답변

2

이 두 문자열의 반환은 MySQL의 특징입니다 (유용한 기능!). SELECT 문은 대소 문자 나 문자의 모음 길이에 영향을받지 않을 수 있습니다. 이 기능을 데이터 정렬이라고합니다. utf_unicode_ci는 아마도 urdu이라는 열의 데이터 정렬 일 것입니다.

그러나 필요한 경우 WHERE 절에서이를 제어 할 수 있습니다.

WHERE COLLATE utf_bin urdu = 'اِس' 

(나는 당신의 아랍어 망가 경우에 저를 용서해주세요. 제가 그 언어의 무지입니다)

하지만, 당신이 그것을 디버깅 완료되면 MySQL은 이미 응용 프로그램에 적합한 결과를 제공 할 수 있음을 고려하시기 바랍니다 및 그것을 생산에 넣으십시오.

부분 일치를 원한다면 LIKE를 사용할 필요가 없습니다.

+0

당신은 완전히 정확합니다. 나는 단지 이것에 응답 한 적이 없다는 것을 알았지 만 그것은 그 해답이었다. (1 년 전) :-) – theglossy1

0

같은 단어를 검색하고 있습니다. 하나는 짧은 모음이고 다른 하나는 아닙니다. 짧은 모음은 선택 사항이므로 두 버전을 모두 사용할 수 있습니다. 이제 MySQL은 모음을 삭제하고 동일한 항목을 반환 할 정도로 똑똑해 보입니다. 두 버전이 모두 같기 때문에 쿼리에서 LIKE 인수를 삭제해야 할 수도 있습니다.

이러한 종류의 문제를 피하려면 모든 짧은 모음에서 db 항목을 제거하고 원래 단어를 두 번째 행에 저장하십시오. 그런 다음 모든 쿼리를 제거하고 동일한 항목을 검색 할 수도 있습니다.

+0

'LIKE'이 아니며 데이터 정렬 일입니다. –

0

이 시도 :

SELECT urdu FROM transliteration WHERE urdu LIKE 'اِس' collate utf8_bin 

을 또는 오히려 코드의 끝 부분에 collate utf8_bin을 추가, 내가 바로 문자를 가지고 확실하지 않다.

관련 문제