【问题标题】:SQL Server unique constraint issue on unicode charactersSQL Server unicode 字符的唯一约束问题
【发布时间】:2013-10-18 17:46:54
【问题描述】:

我的表定义如下:

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'ދިވެހިބަސް‏');

我得到第二次插入。

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

有人知道为什么 unicode 字符会导致这些问题吗?

【问题讨论】:

标签: sql sql-server unicode unique-constraint


【解决方案1】:

尝试使用更具体的(二进制)排序规则声明 NativeName 列。

例如:

 NativeName nvarchar(50) collate SQL_Latin1_General_CP437_BIN not null unique 

【讨论】:

  • 我知道这个查询需要某种排序规则修复,但你如何确定哪种排序规则可以完成这项工作,因为我可以在 OP 试图插入的这个查询中看到这两种不同的语言.能否请您给一些解释提前谢谢你:)
  • @MuhammedAli 关键是它是一个二进制排序规则 - 我选择这个是因为它是通用的,而不是语言排序规则,但很可能任何二进制排序规则都可以工作。跨度>
  • 成功了,谢谢。老实说,我完全不知道发生了什么。我想我必须对整个排序规则进行一些研究。
  • 请帮助我理解您的回答:它是重现问题(并因此回答问题why..?)还是修复
  • @AndriyM 这将解决它。
猜你喜欢
  • 2013-11-01
  • 2011-02-17
  • 2019-05-13
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
相关资源
最近更新 更多