这是Oracle SQL错误吗?
我的表中有一个名为这是Oracle SQL错误吗?,sql,oracle,plsqldeveloper,Sql,Oracle,Plsqldeveloper,我的表中有一个名为TNAME的列,类型为nvarchar2(8)。如您所见,长度为8。表中有一些记录,所有记录在该列中都有8个符号。选择该列时,该值仅包含7个符号。如果我从mytable中选择长度(TNAME),结果是8 请看图片。 你知道为什么会这样吗 另一张图片 查询是正确的。如您所见,记录与您的条件相匹配CMN00632。之所以只得到3的结果,是因为GUI切断了该值。尝试调整列的大小TNAME,您将看到整个值。这是因为在设置中,您已将某个位置设置为显示列数据最多7个字符 若在命令提示符
TNAME
的列,类型为nvarchar2(8)
。如您所见,长度为8。表中有一些记录,所有记录在该列中都有8个符号。选择该列时,该值仅包含7个符号。如果我从mytable
中选择长度(TNAME),结果是8强>
请看图片。
你知道为什么会这样吗
另一张图片
查询是正确的。如您所见,记录与您的条件相匹配
CMN00632
。之所以只得到3
的结果,是因为GUI切断了该值。尝试调整列的大小TNAME
,您将看到整个值。这是因为在设置中,您已将某个位置设置为显示列数据最多7个字符
若在命令提示符下执行查询,将看到正确的结果
在编辑器中执行下面的查询,并查看查询结果。
选择“123456789”作为商户测试代码>
我打赌这将在您正在使用的编辑器中给出结果为1234567
还有一个基本问题,您认为通过您的查询可以在图像中显示行吗?让我们非常清楚这一点:Oracle不是世界上最昂贵的数据库,因为它习惯性地断言
('CMN00632'='CMN0063')是正确的
。因此,问题存在于您的设置中,无论是在您的环境配置中还是在您的数据本身中
您仍然坚信GUI没有问题。我们无法验证这一点。然而,如果你错了,你是唯一受影响的人,所以我们就假设你是对的
另一种可能是您的数据以某种方式损坏,可能是非打印字符。此问题是影响ebvery行还是仅影响表中的某些值
无论哪种方式,您都可以运行一个简单的检查:
select dump(tname)
from merchants
where tname = 'CMN00632';
输出应该是该字符串的ASCII值:67,77,78,48,48,48,51,50
顺便提一下,要证明没有与该列相关联的截断格式是非常简单的:使用列别名。这个查询返回什么
select tname as some_new_name
from merchants
where tname = 'CMN00632';
我想说你的GUI只是把那个列太窄了。如果您的查询确实返回的行的值不是
'CMN00632'
,那么是的,因为您的数据库不知道=
是什么意思,所以存在严重错误。我支持Wooble的假设。我也会怀疑GUI在最后会切断这2个。宽度没有问题@呜呜,看起来怎么样好的。这就是问题所在。长度为8,值为7。where中有CMN00632,resultIf中有CMN0063如果where
子句确实产生了您声称的结果,您可能需要切换到一个有效的数据库。虽然我怀疑人们现在已经注意到,如果在Oracle中,=foo
的意思是像foo%
,你是错的。整个值是CMN0063,而不是CMN00632@levi不,DerekFloss是正确的。如果值为CMN0063,则查询将不返回任何结果(因为WHERE子句中有CMN00632)。“投赞成票的回答。”弗兰克施密特,不!它的结果和那一点@levi我不知道你所说的“it results and that the point”是什么意思,但是你确实在你的查询中加入了“where tname='CMN00632”,因此你不会得到任何带有tname'CMN0063'的结果。由于您似乎正在使用PL/SQL Developer,请尝试在命令窗口中运行此命令,或者尝试增加列宽(正如其他人向您建议的那样)-您将看到您的列值确实是“CMN00632”。@levi:What you get for选择“CMN00632”作为来自商家的测试代码>@FahimParkar-任何环境格式都将与列名而不是表关联。