2010-05-17 1 views
2

SQL Server 데이터베이스에 nvarchar 열에 다음 값이있는 레코드가 있습니다. '穂 坂' 두 번째 문자는 단순한 공백 인 유니 코드 값 0x20입니다 캐릭터.중국어 공백 문자와의 Sql 서버 문자열 비교 문제

해당 열에 고유 한 키 제약 조건이 있습니다.

다음 값을 삽입하려고하면 고유 키 위반이 발생합니다. '穂 坂' 이 문자열에서 두 번째 문자는 중국어 공백 문자 인 유니 코드 값 0x3000입니다.

왜 고유 키 위반이 발생합니까? 왜 SQL Server는 중국어 공백 문자를 단순한 공간으로 "변환"합니까?

미리 감사드립니다. 그런데 내 데이터 정렬은 SQL_Latin1_General_CP1_CI_AS입니다.

답변

0

데이터 정렬이 width-insensitive 일 수 있습니다.

  • 사용자의 요구에 맞는 하나를 데이터베이스의 데이터 정렬을 변경, 그리고 폭에 민감한 :

    고려.

  • 해당 특정 열의 데이터 정렬을 폭에 민감한 것으로 변경하십시오. 이것은 저장된 procs 등을 통해 더 많은 수의 COLLATE clauses으로 이어질 수 있습니다. DBA가 권장하는 방법인지 확실하지 않습니다.

alt text

+0

I는 (Latin1_General_CI_AS_WS) 폭 민감한 정렬로 변환하려고했으나 삽입 여전히 고유 키 원인을 수행 위반. –

1

먼저 당신이 조합을 포함한다 SQL의 생성하라 문자열 형식을 사용할 수 있습니다. 두 번째로 N 접두어로 시작하는 UNICODE 문자열을 사용할 수 있습니다.

예 :

SELECT CAST(N'穂 坂' COLLATE Chinese_Simplified_Pinyin_100_BIN2 AS VARBINARY(32)) 

=> 0x427A20004257

SELECT CAST(N'穂 坂' COLLATE Chinese_Simplified_Pinyin_100_BIN2 AS VARBINARY(32)) 

=> 0x427A00304257