2009-08-21 2 views
0

필자는 db에서 UTF-8 문자로 작업 해 왔으며 utf-8에서 ascii로 문자를 번역하기 전에 PHP inconv 함수를 사용하여 데이터베이스에 넣었습니다.mysql 인덱스가 UTF-8을 ASCII로 변환합니까?

이 방법은 데이터베이스를 쿼리하기 전에 쿼리를 ASCII로 변환하는 것입니다. 그러나 이제는 저에게 mysql이이 번역을한다고 믿게하는 결과를보고 있습니다.

아무도 그 말이 맞는지, 그리고 PHP에서 전체 inconv를 건너 뛸 수 있습니다 (어쨌든별로 효과적이지 않습니다).

예를 들어, 'lsci'에 대한 검색은 'Lesci'를 반환하므로 ASCII 로의 변환이 어느 시점에서 일어나고 있다고 생각하게됩니다.

테이블은 utf_8_unicode_ci로 인코딩됩니다. 필드는 전체 텍스트 인덱스가있는 varchar (255)입니다. 쿼리가 매우 간단합니다. "SELECT * FROM users where name = 'lësci'"는 'l 'sci'와 'Lesci'를 반환합니다.

+0

방금 ​​MySQL 5.0.75를 사용해 보았지만 설명 할 때 아무런 문제가 없습니다. 'l 'sci'와 'Lesci'는 각각의 문자열에만 일치합니다. 어떤 버전의 MySQL을 사용하고 있는지, 그리고 테이블 정의와 문제를 보여주는 쿼리의 예와 같은 세부 사항을 더 줄 수 있습니까? –

+0

감사합니다 빌, MySQL 5.027을 사용하고 있습니다. 이 테이블은 utf_8_unicode_ci로 인코딩됩니다. 이 필드는 전체 텍스트 인덱스가있는 varchar (255)입니다. 쿼리가 매우 간단합니다. "SELECT * FROM users where name = 'lësci'"는 'l 'sci'와 'Lesci'를 반환합니다. – pedalpete

+0

설명하는 동작을 여전히 재현 할 수 없습니다. 데이터 정렬은 이름을 지정했지만 문자 세트는 지정하지 않았습니다. "'SHOW CREATE TABLE users'의 결과를 알려주시겠습니까? 또한 세션의 문자 세트 및 데이터 정렬은 무엇입니까 (예 : 'SET NAMES'명령을 수행 했습니까)? –

답변

1

인덱스에 대해 utf8_unicode_ci 데이터 정렬을 사용한다고 가정합니다. 대조는 속임수를했습니다. 실제로 모든 것을 ASCII로 변환하지는 않지만 강조된 문자와 원시 문자 사이의 매핑을 처리합니다.

utf8_generic_ci는 매핑이 훨씬 간단하므로 utf8_generic_ci를 사용하면이 값이 동일하지 않을 수 있으므로 더 빠릅니다.

+0

그게 내가 생각하기에, 나는 단지 색인이 전체 텍스트가 아니라는 것을 깨달았을 뿐이다. – pedalpete

관련 문제