25

我写了一个查询

SELECT * FROM Users WHERE UserName = 'admin '

由于输入错误。但是我发现结果是一样的

SELECT * FROM Users WHERE UserName = 'admin'

似乎最后的空白空间被 SQL Server 自动忽略了。

谁能告诉我为什么?

仅供参考,该列UserName的类型为nvarchar(MAX)

4

2 回答 2

31

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

SQL Server 如何将字符串与尾随空格进行比较一文详细解释了这一点。

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

此外,如文章中所述,如果您与您进行比较,LIKE不会得到这种行为。

于 2013-07-26T08:30:24.673 回答
7

如果你正在尝试这样

SELECT * 
FROM Users 
WHERE UserName = 'admin '

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

SELECT * 
FROM Users 
WHERE UserName Like 'admin '

它也考虑空白。

DECLARE @Person1 varchar(50)='admin'
SELECT 1  WHERE @Person1 = 'admin '
SELECT 1  WHERE @Person1 like 'admin '

上述查询集的结果是

在此处输入图像描述

于 2013-07-26T08:45:05.333 回答