8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

为什么 SQL Server 会自动忽略末尾的空格?

branco 2月前

46 0

我错误地输入了查询 SELECT * FROM Users WHERE UserName = 'admin '。但我发现结果与 SELECT * FROM Users WHERE UserName = 'admin' 相同 似乎...

我写了一个查询

SELECT * FROM Users WHERE UserName = 'admin '

错误地输入。但我发现结果和

SELECT * FROM Users WHERE UserName = 'admin'

看起来 SQL Server 会自动忽略末尾的空白。

谁能告诉我为什么?

仅供参考,该列 UserName 属于类型 nvarchar(MAX) .

帖子版权声明 1、本帖标题:为什么 SQL Server 会自动忽略末尾的空格?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由branco在本站《sql-server》版块原创发布, 转载请注明出处!
最新回复 (0)
  • SQL Server 遵循 ANSI/ISO 标准进行字符串比较。

    文章 “SQL Server 如何比较带有尾随空格的字符串” 详细解释了这一点。

    SQL Server 遵循 ANSI/ISO SQL-92 规范...关于如何比较带空格的字符串。ANSI 标准要求对用于比较的字符串进行填充,以便在比较之前使它们的长度匹配。填充直接影响 WHERE 和 HAVING 子句谓词和其他 Transact-SQL 字符串比较的语义。例如,对于大多数比较操作,Transact-SQL 认为字符串“abc”和“abc ”是等价的。

    此外,正如文章中所解释的,如果您与之比较, LIKE 您就 不会 发现这种行为。

  • 当然,与 LIKE 进行比较并不会测试是否相等,因此下一个自然的问题是如何让 SQL Server 在比较带有和不带有尾随空格的 varchars 时返回 FALSE?

  • 所以本质上,当你比较两个不同长度的字符串时,较短的字符串会用空格填充到较长字符串的长度?我从来没有想过。我一度以为我公司的软件中有一个 Schrödinbug 被激活了,导致字符串出现了虚假的尾随空格,但事实证明这并没有什么区别,我看到的 bug 是出于其他原因。

  • 如果你正在尝试这样做

    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 '
    

    上述查询集的结果是

    enter image description here

返回
作者最近主题: