【发布时间】:2020-10-02 06:47:05
【问题描述】:
有没有办法“绕过”SQL 整理逻辑?我想要两个不同的字节数组给我两个不同的键,无论如何,并且没有 SQL 试图整理它们。
如果可能,我更喜欢使用 nvarchar 数据类型。
我发现的最通用的 COLLATE 设置是“Latin1_General_100_BIN2”,但在这个示例中,即使这样也给我带来了冲突:
CREATE TABLE [dbo].[test] (
[Feature] [nvarchar](450) COLLATE Latin1_General_100_BIN2 NOT NULL,
CONSTRAINT [PK_dbo.test] PRIMARY KEY CLUSTERED ([Feature] ASC)
)
insert into test values ('a')
insert into test values ('a ')
我得到了错误
Violation of PRIMARY KEY constraint 'PK_dbo.test'. Cannot insert duplicate key in object 'dbo.test'. The duplicate key value is (a ).
我在 MS Azure 中使用 SQL 服务器。
【问题讨论】:
-
尾随空格与排序规则无关。
-
改用 varbinary?
-
这是标准的 SQL 规则 - 在比较两个字符串是否相等之前,较短的字符串用空格填充。正如 jarlh 所说,与排序规则无关。
-
@Damien_The_Unbeliever 有没有办法绕过这个(对于 nvarchar)?
-
您可以为修剪后的长度创建一个计算列,并将该列包含在 pk 中。仍然不清楚您为什么要这样做。
标签: sql azure-sql-database collate