SQL Server 唯一约束中的 Unicode
Posted
技术标签:
【中文标题】SQL Server 唯一约束中的 Unicode【英文标题】:Unicode in SQL Server unique constraints 【发布时间】:2013-11-01 10:33:21 【问题描述】:考虑以下脚本 - 第二个 INSERT 语句引发主键冲突。
BEGIN TRAN
CREATE TABLE UnicodeQuestion
(
UnicodeCol NVARCHAR(100)
COLLATE Latin1_General_CI_AI
)
CREATE UNIQUE INDEX UX_UnicodeCol
ON UnicodeQuestion ( UnicodeCol )
INSERT INTO UnicodeQuestion (UnicodeCol) VALUES (N'ae')
INSERT INTO UnicodeQuestion (UnicodeCol) VALUES (N'æ')
ROLLBACK
据我了解,如果我想让我的索引分别处理这些值,我需要使用二进制排序规则。但是有许多二进制排序规则,它们的名称中有各自的文化!我不想要文化敏感的治疗......
在 nvarchar 列中存储任意 Unicode 数据时应该使用哪种排序规则?
【问题讨论】:
如果您对Latin1_General_CI_AI
感到满意,那么Latin1_General_BIN
是否不可接受?
可能,是的 :) 我只是对为什么会有文化方面感到困惑,而它应该是二进制排序规则?
【参考方案1】:
对于 Unicode 数据it is irrelevant what binary collation you choose。
对于 Unicode 数据类型,数据比较基于 Unicode 码点。对于 Unicode 数据类型的二进制排序规则,语言环境 在数据排序中不考虑。例如,Latin_1_General_BIN 和 Japanese_BIN 在 Unicode 上使用时产生相同的排序结果 数据。
使用特定于区域设置的BIN
排序规则的原因是,这决定了处理非 Unicode 数据时使用的代码页。
【讨论】:
以上是关于SQL Server 唯一约束中的 Unicode的主要内容,如果未能解决你的问题,请参考以下文章
SQL server 2005如何设置一个或几个字段唯一约束?