【问题标题】:Why the SQL Server ignore the empty space at the end automatically?为什么 SQL Server 会自动忽略末尾的空格?
【发布时间】:2013-07-26 08:25:09
【问题描述】:
我写了一个查询
SELECT * FROM Users WHERE UserName = 'admin '
输入错误。但是我发现结果和
一样
SELECT * FROM Users WHERE UserName = 'admin'
似乎最后的空白被SQL Server自动忽略了。
谁能告诉我为什么?
仅供参考,UserName 列的类型为 nvarchar(MAX)。
【问题讨论】:
标签:
sql-server
sql-server-2012
【解决方案1】:
SQL Server 遵循 ANSI/ISO 标准进行字符串比较。
How SQL Server Compares Strings with Trailing Spaces 文章对此进行了详细说明。
SQL Server 遵循 ANSI/ISO SQL-92 规范...关于如何
将字符串与空格进行比较。 ANSI 标准要求填充
比较中使用的字符串,以便它们的长度匹配
在比较它们之前。填充直接影响语义
WHERE 和 HAVING 子句谓词和其他 Transact-SQL 字符串
比较。例如,Transact-SQL 考虑字符串 'abc' 和
'abc' 对于大多数比较操作来说是等价的。
此外,如文章中所述,如果您与 LIKE 进行比较,您确实不会得到这种行为。
【解决方案2】:
如果你这样尝试
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 '
上述查询集的结果是