我在声明为nvarchar(50)
的表中有2个字段。在一些记录中,该字段具有看起来相同的值。但是,当我使用where子句field1 <> field2,
运行查询时,它会发现字段不同。我尝试使用where子句ltrim(rtrim(field1)) <> ltrim(rtrimfield2))
,但它仍然找到了不同之处。我很难过!
提前致谢。
答案 0 :(得分:2)
当您使用来自不同语言的类似信件时,可能会发生这种情况。你不能在眼睛上识别它们,但是它们是不同的......
例如,这是所有英文字母和Ελληνικά(Ellas),有些看似相同,但不是。
o&lt;&gt; ο
Y&lt;&gt; Υ
A&lt;&gt; Α
E&lt;&gt; Ε
其他一些人虽然规模不大但却很明显
你&lt;&gt; υ
p&lt;&gt; ρ
我&lt;&gt; ι
所以这个'word'与'o'上的'wourrd'不同,但你看不到它。
ps我认为这个问题,因为你说“少数记录”
答案 1 :(得分:1)
除了@Aristos所说的,它还可能是非中断空间(U + 00A0)或零宽度空间(U + 200B)等字符,未经LTRIM
/ RTRIM
修剪。
答案 2 :(得分:0)
我遇到了同样的问题。
我的表包含名为Definition的NVARCHAR(MAX)字段。数据库中的当前字符串长度为956个字符。
代码调用数据并返回有效数据。 [事情发生]。构建update命令,它使用WHERE子句中的Definition字段。零行更新。
我拦截了查询并注意到当从where中排除了Definition时,UPDATE命令就会执行。
直接转到数据库,我运行了一个简单的SELECT定义FROM表WHERE Id = [无论id是什么]。行返回。
接下来,我从第一个结果复制了Definition,并将查询更改为WHERE Definition ='[...]',并且没有返回任何内容。
开始困惑,我改变了查询,以便内部选择通过Id获取定义,并且外部在内部选择的结果上具有IN。这会返回一行。
这使我认为当您将文本(ASCII)与NVARCHAR(UNICODE)中的值进行比较时会出现“问题”。
我仍然想要得到答案。
*请不要评论我在代码或奇怪的WHERE子句中构建查询的事实。