为什么默认情况下在SQL Server中启用ANSI填充?
有人能告诉我在SQL server中默认启用ANSI填充的逻辑是什么吗 其中,下面的两个代码段返回true为什么默认情况下在SQL Server中启用ANSI填充?,sql,sql-server,string,Sql,Sql Server,String,有人能告诉我在SQL server中默认启用ANSI填充的逻辑是什么吗 其中,下面的两个代码段返回true if len(' ') = len('') begin print 'true' end else begin print 'false' end if ' ' = '' begin print 'true' end else begin print 'false' end 编辑:我不在乎你是否可以关闭它。有人知道它为什么开着吗?
if len(' ') = len('') begin
print 'true'
end
else begin
print 'false'
end
if ' ' = '' begin
print 'true'
end
else begin
print 'false'
end
编辑:我不在乎你是否可以关闭它。有人知道它为什么开着吗?这是一个数据库设计决策吗?这是数据库优化吗?这种方法的优点是什么?这对我来说毫无意义——我所看到的都是负面消息。:
SQL Server遵循ANSI/ISO SQL-92规范(第8.2节,
,关于如何比较字符串的一般规则#3)
有空格。ANSI标准要求字符填充
用于比较的字符串,以便它们的长度在比较之前匹配
比较它们。填充直接影响WHERE的语义
并具有子句谓词和其他Transact-SQL字符串
比较。例如,Transact-SQL考虑字符串“abc”和
对于大多数比较操作,“abc”是等效的
:
SQL Server遵循ANSI/ISO SQL-92规范(第8.2节,
,关于如何比较字符串的一般规则#3)
有空格。ANSI标准要求字符填充
用于比较的字符串,以便它们的长度在比较之前匹配
比较它们。填充直接影响WHERE的语义
并具有子句谓词和其他Transact-SQL字符串
比较。例如,Transact-SQL考虑字符串“abc”和
对于大多数比较操作,“abc”是等效的
测试行为:
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
测试行为:
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
好吧,从它的名字来看,逻辑应该是遵守一个标准?ANSI=美国国家标准协会。这只是一个默认设置。您可以很容易地对其进行更改,可以按数据库更改,也可以按单个批次/事务更改。与默认排序规则相同,不区分大小写,有些人会认为这是一个糟糕的选择。请注意,
设置ANSI_PADDING OFF
是一个在将来的版本中甚至不允许使用的排序规则。示例中的结果在设置ANSI_PADDING OFF下不会更改
ANSI_PADDING
Good point@MartinSmith-我否决了这个问题,因为行为似乎与设置无关。是否有一个设置可以改变问题中代码的行为?好吧,从名称来看,逻辑应该是符合一个标准?ANSI=美国国家标准协会。这只是一个默认设置。您可以很容易地对其进行更改,可以按数据库更改,也可以按单个批次/事务更改。与默认排序规则相同,不区分大小写,有些人会认为这是一个糟糕的选择。请注意,设置ANSI_PADDING OFF
是一个在将来的版本中甚至不允许使用的排序规则。示例中的结果在设置ANSI_PADDING OFF下不会更改
ANSI_PADDING
Good point@MartinSmith-我否决了这个问题,因为行为似乎与设置无关。是否存在更改问题中代码行为的设置?