这是Oracle SQL错误吗?

时间:2012-12-17 13:28:38

标签: sql oracle plsqldeveloper

我的表格中有一个名为TNAME的{​​{1}}列。如您所见,长度 8 。表中有一些记录,所有记录在该列中都有8个符号。当我选择该列时,该值包含仅7个符号。如果我nvarchar2(8)结果为8 !!!

见图。 enter image description here

为什么会这样,任何想法?

另一张PIC

enter image description here

enter image description here

3 个答案:

答案 0 :(得分:4)

让我们对此非常清楚:Oracle不是世界上最昂贵的数据库,因为它习惯性地断言('CMN00632' = 'CMN0063') is true。因此问题出在您的设置中,无论是在您的环境配置中还是在您的数据本身中。

您仍然坚持认为您的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';

答案 1 :(得分:3)

查询是正确的。如您所见,记录与您的条件CMN00632匹配。您将结果仅提高到3的原因是因为GUI会切断值。尝试调整列TNAME的大小,您将看到整个值。

答案 2 :(得分:0)

这种情况正在发生,因为在设置中,您设置的位置显示列数据最多为7个字符

如果在命令提示符下执行查询,则会看到正确的结果。

在您的编辑器中执行以下查询并查看其提供的内容。

<强> select '123456789' as test from merchants;

我敢打赌,这会在你正在使用的编辑器中以 1234567 结果。

还有一个基本问题 您认为您的图像中显示的行会显示您的查询吗?