5

次のようなテーブル定義があります。

create table [Language](
Id int primary key identity,
Code varchar(11) not null unique,
NativeName nvarchar(50) not null unique
)

そして、そのテーブルに挿入するステートメントの長いリストがあります。NativeName問題は、列の一意の制約でいくつかの挿入ステートメントが競合することです。奇妙なことに、コンテンツはまったくユニークではありません。たとえば、テーブルを空にして次のみを挿入した場合:

insert into Language (Code, NativeName) values('am', N'አማርኛ');
insert into Language (Code, NativeName) values('dv', N'ދިވެހިބަސް‏');

私は 2 番目の挿入を取得します。

Violation of UNIQUE KEY constraint 'UQ__Language__EB1957A5F98D1F9C'. Cannot insert duplicate key in object 'dbo.Language'. The duplicate key value is (ދިވެހިބަސް‏).

ユニコード文字がこれらの問題を引き起こしている理由を知っている人はいますか?

4

1 に答える 1

3

より具体的な (バイナリ) 照合順序で NativeName 列を宣言してみてください。

例えば:

 NativeName nvarchar(50) collate SQL_Latin1_General_CP437_BIN not null unique 
于 2013-10-10T19:56:39.267 に答える