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 Compare Strings with Trailing Spacesでは、これについて詳しく説明しています。

SQL Server は ANSI/ISO SQL-92 仕様に従っています...文字列をスペースと比較する方法について。ANSI 標準では、比較に使用する文字列を比較する前に長さが一致するように、文字列のパディングが必要です。パディングは、WHERE 句と HAVING 句の述語、およびその他の Transact-SQL 文字列比較のセマンティクスに直接影響します。たとえば、Transact-SQL では、文字列 'abc' と 'abc ' はほとんどの比較操作で同等であると見なされます。

また、記事で説明されているように、 と比較すると、この動作は得られLIKEません。

于 2013-07-26T08:30:24.673 に答える