为什么在SQL Server中默认启用ANSI填充?

时间:2011-10-26 13:22:35

标签: sql sql-server string

有人可以向我解释在SQL服务器中默认启用ANSI填充的逻辑。

以下两个代码段返回true

if len('       ') = len('') begin
    print 'true'
end
else begin
    print 'false'
end

if '       ' = '' begin
    print 'true'
end
else begin
    print 'false'
end

编辑:我不在乎您可以将其关闭。有谁知道为什么会这样?这是数据库设计决策吗?它是数据库优化吗?这被使用的积极因素是什么?这对我来说当然没有多大意义 - 我所看到的都是消极的。

2 个答案:

答案 0 :(得分:4)

To be compliant with the ANSI/ISO SQL-92 specification

  

SQL Server遵循ANSI / ISO SQL-92规范(第8.2节,   ,关于如何比较字符串的一般规则#3)   有空格。 ANSI标准要求填充字符   比较中使用的字符串,以便它们的长度匹配   比较它们。填充直接影响WHERE的语义   和HAVING子句谓词和其他Transact-SQL字符串   比较。例如,Transact-SQL认为字符串'abc'和   'abc'与大多数比较操作相同。

答案 1 :(得分:2)

测试行为:

SELECT SESSIONPROPERTY('ANSI_PADDING') AS [ANSI_PADDING]

SET ANSI_PADDING ON

IF '       ' = '' BEGIN
    PRINT 'TRUE'
END
ELSE BEGIN
    PRINT 'FALSE'
END

SET ANSI_PADDING OFF

IF '       ' = '' BEGIN
    PRINT 'TRUE'
END
ELSE BEGIN
    PRINT 'FALSE'
END

SET ANSI_PADDING ON

输出:

TRUE
TRUE