我的表中有一个名为TNAME
type的列nvarchar2(8)
。如您所见,长度为8 。表中有几条记录,所有记录在该列中都有 8 个符号。当我选择该列时,该值仅包含 7 个符号。如果我select length(TNAME) from mytable
,结果是 8!!!
看图片。
为什么会发生这种情况,有什么想法吗?
另一张照片
我的表中有一个名为TNAME
type的列nvarchar2(8)
。如您所见,长度为8 。表中有几条记录,所有记录在该列中都有 8 个符号。当我选择该列时,该值仅包含 7 个符号。如果我select length(TNAME) from mytable
,结果是 8!!!
看图片。
为什么会发生这种情况,有什么想法吗?
另一张照片
让我们明确一点: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';
查询是正确的。如您所见,记录与您的条件匹配CMN00632
。你得到结果的原因只是3
因为 GUI 切断了这个值。尝试调整列的大小TNAME
,您将看到整个值。
发生这种情况是因为在设置中,您已将列数据设置为最多显示 7 个字符。
如果您在命令提示符下执行查询,您将看到正确的结果。
在您的编辑器中执行以下查询,看看它给出了什么。
select '123456789' as test from merchants;
1234567
我敢打赌,这将在您使用的编辑器中给出结果。
还有一个基本问题,你认为你会用你的查询得到图像中显示的行吗?