-6

我的表中有一个名为TNAMEtype的列nvarchar2(8)。如您所见,长度为8 。表中有几条记录,所有记录在该列中都有 8 个符号。当我选择该列时,该值仅包含 7 个符号。如果我select length(TNAME) from mytable结果是 8!!!

看图片。 在此处输入图像描述

为什么会发生这种情况,有什么想法吗?

另一张照片

在此处输入图像描述

在此处输入图像描述

4

3 回答 3

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';
于 2012-12-17T13:53:51.750 回答
3

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

于 2012-12-17T13:36:44.230 回答
0

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

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

在您的编辑器中执行以下查询,看看它给出了什么。

select '123456789' as test from merchants;

1234567我敢打赌,这将在您使用的编辑器中给出结果。

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

于 2012-12-17T13:46:59.827 回答