为什么SQL Server会自动忽略最后的空白区域?

Jai*_*Lee 13 sql-server sql-server-2012

我写了一个查询

SELECT * FROM Users WHERE UserName = 'admin '
Run Code Online (Sandbox Code Playgroud)

错误打字.但我发现结果与之相同

SELECT * FROM Users WHERE UserName = 'admin'
Run Code Online (Sandbox Code Playgroud)

似乎SQL Server自动忽略了最后的空白区域.

谁能告诉我为什么?

仅供参考,该列UserName属于类型nvarchar(MAX).

Ian*_*ton 18

SQL Server遵循ANSI/ISO标准进行字符串比较.

SQL Server如何比较具有尾随空格的字符串这一文章详细解释了这一点.

SQL Server遵循ANSI/ISO SQL-92规范......关于如何比较字符串和空格.ANSI标准要求对比较中使用的字符串进行填充,以便在比较它们之前使它们的长度匹配.填充直接影响WHERE和HAVING子句谓词以及其他Transact-SQL字符串比较的语义.例如,Transact-SQL认为字符串'abc'和'abc'在大多数比较操作中都是等效的.

此外,正如文章中所解释的,如果您与LIKE您进行比较,则不会出现此行为.


Nit*_*esh 6

如果你像这样尝试

SELECT * 
FROM Users 
WHERE UserName = 'admin '
Run Code Online (Sandbox Code Playgroud)

SQL Server 将忽略空格。但是如果你像这样尝试

SELECT * 
FROM Users 
WHERE UserName Like 'admin '
Run Code Online (Sandbox Code Playgroud)

它也考虑了空白空间。

DECLARE @Person1 varchar(50)='admin'
SELECT 1  WHERE @Person1 = 'admin '
SELECT 1  WHERE @Person1 like 'admin '
Run Code Online (Sandbox Code Playgroud)

上述查询集的结果是

在此处输入图片说明