クエリを書きました
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 Compare Strings with Trailing Spacesでは、これについて詳しく説明しています。
SQL Server は ANSI/ISO SQL-92 仕様に従っています...文字列をスペースと比較する方法について。ANSI 標準では、比較に使用する文字列を比較する前に長さが一致するように、文字列のパディングが必要です。パディングは、WHERE 句と HAVING 句の述語、およびその他の Transact-SQL 文字列比較のセマンティクスに直接影響します。たとえば、Transact-SQL では、文字列 'abc' と 'abc ' はほとんどの比較操作で同等であると見なされます。
また、記事で説明されているように、 と比較すると、この動作は得られLIKE
ません。