请考虑以下事项:
IF OBJECT_ID('tempdb..#CharacterTest') IS NOT NULL
DROP TABLE #CharacterTest
CREATE TABLE #CharacterTest
(
[ID] int IDENTITY(1, 1) NOT NULL,
[CharField] varchar(50) NULL
)
INSERT INTO #CharacterTest (CharField)
VALUES ('DavidIsCool.')
, ('David')
, ('Bleh')
, ('Bleh')
, ('A')
, ('A')
, (' ')
, (' ')
, (' ')
, (' ')
, (' ');
Select count(*) RecordCount from #CharacterTest
SELECT DISTINCT CharField FROM #CharacterTest
SELECT count (DISTINCT CharField) FROM #CharacterTest
对于第二次和第三次查询,我总共返回了5个值。
为什么我的查询表明完全由空格组成的记录是相同的?这是由于整理设置吗?
答案 0 :(得分:2)
之前从未意识到这一点,但here是你的答案......
SQL Server遵循ANSI / ISO SQL-92规范(第8.2节, ,关于如何比较字符串的一般规则#3) 有空格。 ANSI标准要求填充字符 比较中使用的字符串,以便它们的长度匹配 比较它们。
同样来自同一篇文章,关于我最初的失败假设,这是由于ANSI_PADDING设置:
SET ANSI_PADDING设置不会影响SQL Server是否填充 在比较它们之前的字符串。 SET ANSI_PADDING仅影响是否 从插入表中的值中修剪尾随空白, 所以它会影响存储但不会影响比较。