问题描述
|
我在声明为
nvarchar(50)
的表中有2个字段。在一些记录中,该字段具有看起来相同的值。但是,当我使用where子句“ 1”运行查询时,会发现字段是不同的。我尝试使用where子句ltrim(rtrim(field1)) <> ltrim(rtrimfield2))
,但仍然发现有区别。我很沮丧!
提前致谢。
解决方法
当您使用不同语言的相似字母时,可能会发生这种情况。您无法在眼睛上认出它们,但有所不同...
例如,这是英文和Ελληνικά(Ellas)中的所有字母,有些看起来相同,但不同。
o <>ο
Y <>Υ
A <>Α
E <>Ε
其他一些虽然很小但明显不同
u <>υ
p <>ρ
我<>ι
因此,这个\'word \'与\'o \'上的\'w \ rd \'是不同的,但是您看不到它。
ps我认为是这个问题,因为您说“记录很少”
, 除了@Aristos所说的以外,还可能是不间断空格(U + 00A0)或零宽度空格(U + 200B)之类的字符,这些字符未用by3ѭ/
RTRIM
修饰。
, 我遇到了同样的问题。
我的表包含一个称为Definition的NVARCHAR(MAX)字段。数据库中的当前字符串长度为956个字符。
代码调用数据,并返回有效数据。 [东西发生]。生成了update命令,它使用WHERE子句中的Definition字段。零行被更新。
我拦截了该查询,并注意到当“定义”从“位置”中排除时,将执行UPDATE命令。
直接进入数据库,我从表WHERE Id = [无论ID是什么]中运行了一个简单的SELECT定义。返回行。
接下来,我从第一个结果中复制了Definition,并将查询更改为WHERE Definition = \'[...] \',但未返回任何内容。
开始感到困惑,我更改了查询,以便内部选择通过ID获得定义,而外部选择在内部选择的结果上具有IN。返回一行。
这使我认为,当您将文本(ASCII)与NVARCHAR(UNICODE)中的值进行比较时,就会出现“问题”。
我仍在设法得到答案。
*请不要对我在代码或奇怪的WHERE子句中构建查询的事实发表评论。