【问题标题】: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 '

上述查询集的结果是

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-20
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多