相关疑难解决方法(0)

唯一索引,varchar列和(空白)空格的行为

我正在使用Microsoft SQL Server 2008 R2(带有最新的Service Pack/patches),数据库排序规则是SQL_Latin1_General_CP1_CI_AS.

以下代码:

SET ANSI_PADDING ON;
GO

CREATE TABLE Test (
   Code VARCHAR(16) NULL
);
CREATE UNIQUE INDEX UniqueIndex
    ON Test(Code);

INSERT INTO Test VALUES ('sample');
INSERT INTO Test VALUES ('sample ');

SELECT '>' + Code + '<' FROM Test WHERE Code = 'sample        ';
GO
Run Code Online (Sandbox Code Playgroud)

产生以下结果:

(1排受影响)

Msg 2601,Level 14,State 1,Line 8

无法在对象'dbo.Test'中插入具有唯一索引'UniqueIndex'的重复键行.重复键值为(样本).

该语句已终止.

------------

>样品<

(1排受影响)

我的问题是:

  1. 我假设索引不能存储尾随空格.任何人都可以指向我指定/定义此行为的官方文档吗?
  2. 是否有一个设置来改变这种行为,也就是说,让它将'sample'和'sample'识别为两个不同的值(顺便说一句,它们都是这样),因此两者都可以在索引中.
  3. 为什么地球上的SELECT会返回一行?SQL Server必须使用WHERE子句中的空格做一些非常有趣/聪明的事情,因为如果删除索引中的唯一性,两个INSERT都将运行正常,SELECT将返回两行!

任何帮助/指针在正确的方向将不胜感激.谢谢.

t-sql sql-server unique-index string-comparison

11
推荐指数
1
解决办法
3726
查看次数