문제

'nickname', UTF-8 인코딩 된 varchar (20)라는 열이있는 컬럼이있는 사용자 테이블이 있습니다. 테이블은 InnoDB에 있습니다.2 개의 레코드는 ickname= 'gunni'와 다른 nickname= 'günni'가 있습니다.이 열에 고유 한 인덱스를 적용하려고 시도했을 때 MySQL은 나 에게이 오류를주었습니다.

오류 1062 (23000) 라인 263 : 키 2

에 대한 복제 항목 'gunni'

이름이 'gunni'라는 이름이있는 하나의 레코드가있는 데이터를 확인하고 'Günni'레코드를 다른 것으로 바꾸면 고유 한 인덱스를 다시 적용하면 모든 것이 잘 작동합니다.

어떻게 'Günni'& 'Gunni'가 복제되어야합니까?여기에 Hex 값이 있습니다. MySQL의 Hex () 함수를 사용하여 다음을 수행합니다.

gunni -> 67756E6E69

günni -> 67C3BC6E6E69

그들은 분명히 다릅니다.MySQL이 어떻게이 2를 동일하게 취급합니까?아니면 내가 독특한 인덱스에 대해 모르는 것이 있습니까?또는 심지어 이것이 mysql 버그가 될 수 있습니까?

도움이 되었습니까?

해결책

사용중인 데이터 정렬 때문입니다.

_ci로 끝나는 모든 것이 대소 문자를 구분하지 않습니다 (또한 악센트 / Umlaut extensitive).그래서, MySQL은 당신이 정렬을 변경하지 않는 한 "Günni"와 "gunni"를 고려할 것입니다.

docs : http://dev.mysql.com/doc / refman / 5.0 / en / charset-table.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top