Asp.net 比较SQL Server 2008 R2中的NVarchar字段

Asp.net 比较SQL Server 2008 R2中的NVarchar字段,asp.net,sql-server-2008-r2,Asp.net,Sql Server 2008 R2,我在一个表中有两个字段声明为nvarchar(50)。在一些记录上,该字段的值似乎相同。然而,当我使用where子句field1field2运行查询时,会发现字段是不同的。我尝试使用where子句ltrim(rtrim(field1))ltrim(rtrimfield2)),但仍然发现了差异。我被难住了 提前感谢。当您使用来自不同语言的类似信函时,可能会发生这种情况。你看不出他们的眼睛,但他们是不同的 例如,这都是英文字母和Ελληνικά(Ellas),有些看起来是一样的,但不是 oο YΥ

我在一个表中有两个字段声明为
nvarchar(50)
。在一些记录上,该字段的值似乎相同。然而,当我使用where子句
field1field2运行查询时,
会发现字段是不同的。我尝试使用where子句
ltrim(rtrim(field1))ltrim(rtrimfield2))
,但仍然发现了差异。我被难住了


提前感谢。

当您使用来自不同语言的类似信函时,可能会发生这种情况。你看不出他们的眼睛,但他们是不同的

例如,这都是英文字母和Ελληνικά(Ellas),有些看起来是一样的,但不是

oο


其他一些有小而明显的不同


所以这个'word'与这个'wοrd'在'o'上不同,但是你看不到它


ps我认为这个问题,因为你在少数记录中说“

除了@Aristos所说的,它也可能是像不间断空格(U+00A0)或零宽度空格(U+200B)这样的字符,它们没有被
LTRIM
/
RTRIM
修剪,我遇到了同样的问题

我的表包含一个名为Definition的NVARCHAR(MAX)字段。数据库中的当前字符串长度为956个字符

代码调用数据并返回有效数据。[事情发生了]。update命令已生成,并使用WHERE子句中的定义字段。零行被更新

我截获了查询,并注意到当定义从where中排除时,就会执行UPDATE命令

直接转到DB,我从表中运行了一个简单的SELECT定义,其中Id=[不管Id是什么]。返回行

接下来,我复制了第一个结果中的定义,并将查询更改为WHERE Definition='[…]',不返回任何内容

首先,我修改了查询,以便内部选择按Id获取定义,外部选择对内部选择的结果有一个IN。返回一行

这让我想到,当您将文本(ASCII)与NVARCHAR(UNICODE)中的值进行比较时,就会出现“问题”

我仍在试图得到答案


*请不要评论我正在用代码或奇怪的WHERE子句生成查询这一事实。

如果您执行
选择“[”+yourColName+”]”怎么办?
??也许有一些额外的尾随特殊字符,你一开始看不到…@hoestang406:这听起来像是一个问题首先,你需要确定你到底遇到了什么样的问题。基本上,我可能会使用这样一个设备:
从…
中选择不同的nvarcharepr,CAST(nvarcharepr作为varbinary),其中
nvarcharepr
将是类似于
的结果(LTRIM(RTRIM(nvarcharColumn))
。这样我就能看到“相同”值之间有什么不同。接下来,我将使用
REPLACE()
函数来消除不可见字符和/或用正确的字母(如果有的话)替换“假”字母。