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