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您进行比较,则不会出现此行为.
如果你像这样尝试
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)
上述查询集的结果是

| 归档时间: |
|
| 查看次数: |
4739 次 |
| 最近记录: |