【发布时间】:2011-07-31 18:54:28
【问题描述】:
SELECT 'Equal'
WHERE ' ' = ''
结果:
-----
Equal
(1 row(s) affected)
【问题讨论】:
-
你有什么问题?
-
字符串比较受很多因素影响,包括语言。也许您的语言环境设置不是您所期望的?
标签: sql-server tsql
SELECT 'Equal'
WHERE ' ' = ''
结果:
-----
Equal
(1 row(s) affected)
【问题讨论】:
标签: sql-server tsql
在使用 = 运算符比较字符串时,SQL Server 不考虑尾随空格。这就是为什么它认为 ' ' 等同于 ''。
这是解释语义的页面:http://support.microsoft.com/kb/316626
【讨论】:
LEN 函数。这似乎是一个奇怪的决定。
LEN 函数是这样实现的。想象一下,您在 char(5) 字段上使用它。由于它是固定长度,如果您考虑尾随空格,那么LEN 将始终为该字段返回 5,这不是很有用。我想 99% 的时间你不会/不应该关心尾随空格。我认为如果代码依赖于存储在数据库中的尾随空格,那么我真的会质疑为什么会这样。
SQL Server 将 ' ' = '' 评估为等于 TRUE 的布尔类型,因此它将返回您在 SELECT 中指定的字符串文字。
同样会发生:SELECT 'Equal' WHERE 1=1
【讨论】:
' ' = ''?