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如何设置一个或几个字段唯一约束?

SQL Server 创建约束图解 唯一 主键

Sql Server 主键 外键约束

SQL server约束

如何在 Sql Server 2008 中设置唯一约束 [重复]

SQL Server(第一章) 创建表 删除表 创建主键约束唯一约束外键约束CHECK约束默认约束