我写了一个查询
SELECT * FROM Users WHERE UserName = 'admin '
由于输入错误。但是我发现结果是一样的
SELECT * FROM Users WHERE UserName = 'admin'
似乎最后的空白空间被 SQL Server 自动忽略了。
谁能告诉我为什么?
仅供参考,该列UserName
的类型为nvarchar(MAX)
。
我写了一个查询
SELECT * FROM Users WHERE UserName = 'admin '
由于输入错误。但是我发现结果是一样的
SELECT * FROM Users WHERE UserName = 'admin'
似乎最后的空白空间被 SQL Server 自动忽略了。
谁能告诉我为什么?
仅供参考,该列UserName
的类型为nvarchar(MAX)
。
SQL Server 遵循 ANSI/ISO 标准进行字符串比较。
SQL Server 如何将字符串与尾随空格进行比较一文详细解释了这一点。
SQL Server 遵循 ANSI/ISO SQL-92 规范...关于如何将字符串与空格进行比较。ANSI 标准要求对比较中使用的字符串进行填充,以便它们的长度在比较之前匹配。填充直接影响 WHERE 和 HAVING 子句谓词的语义以及其他 Transact-SQL 字符串比较。例如,Transact-SQL 认为字符串“abc”和“abc”对于大多数比较操作是等效的。
此外,如文章中所述,如果您与您进行比较,LIKE
则不会得到这种行为。
如果你正在尝试这样
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 '
上述查询集的结果是