2011-01-15 7 views
2

Mysql 5.1 스키마에 테이블이 있습니다. 이 테이블을 생성하기위한 문은 다음과 같습니다MySQL 데이터베이스의 인코딩 문제

CREATE TABLE `prova` (

    `id` varchar(150) NOT NULL, 
    `name` varchar(150) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `name` (`name`) 

) ENGINE=InnoDb DEFAULT CHARSET=ucs2; 

내가 커넥터/J 5.1.14에 의해 인터페이스이 테이블에서 레코드를 기록 우분투 10.10, 실행, 또한 자바 응용 프로그램이 있습니다. 레코드 삽입은 Prepared Statement 클래스를 사용하여 수행됩니다.

표시된 문자 (예 : ('aki kaurismäki', 'aki kaurismäki') 및 ('aki kaurismaki', 'aki kaurismaki')와 다른 두 개의 레코드를 삽입 할 때 두 번째 기록. 실행하기 전에 PreparedStatement에서 쿼리를 인쇄하려고 시도했는데 올바른 것으로 보입니다.이 명령을 mysql 명령 줄 클라이언트에서 수동으로 실행하고 오류가 발생했습니다.

이 문제를 어떻게 해결할 수 있습니까? 사전에 감사합니다, 안토니오

+1

이것은 아마도입니다. 이 동작을 나타내지 않는 16 비트 대체 문자 집합이 있는지 여부를 알 수 없음 –

+0

관련 : http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html –

+0

답장을 보내 주셔서 감사합니다. Pekka utf8_general_ci도 utf_unicode_ci도 작동하지 않습니다. mysql 커맨드 라인 클라이언트에 삽입 된 동일한 쿼리가 아무런 에러도주지 않는다는 것이 이상합니다. –

답변

0

때문이다 -로는 코멘트했다 - manual에서

kaurismäki = kaurismaki 

로 이어지는, MySQL의의 유니 코드 인코딩을 비교 내부적으로 악센트 문자를 정상화 :

추가 설명을 위해 다음 동등성은 utf8_general_ci 및 utf8_unicode_ci 모두에 적용됩니다 (이 효과는에 있음).비교 나하고 검색, 는 제 9.1.7.8, "데이터 정렬의 효과의 예")를 참조 할 때 : 내 이해

Ä = A 
Ö = O 
Ü = U 

, 그것을 밖으로 정렬해야 인덱스 컬럼 ucs2_bin을합니다. 이진 비교는 악센트 부호가있는 문자를 정규화하지 않습니다.

+0

Pekka. 그것은 작동합니다! –

0

이것은 아마도 collation이 악센트가있는 문자를 비교하거나, 대소 문자 (대문자와 소문자)를 비교하도록 설정 되었기 때문일 수 있습니다. 이런 식으로 악센트 부호가있는 문자를 비교하기를 원할 경우 아마 일을해야합니다. 이것의 단점은 대소 문자를 구별하여 원하는 것일 수도 아닐 수도 있다는 것입니다. 나는 액센트 구분에 대한 데이터 정렬이 있다고 생각하지 않지만 대소 문자를 구분하지 않습니다.