【问题标题】:Is this an Oracle SQL bug? [closed]这是 Oracle SQL 错误吗? [关闭]
【发布时间】:2012-12-04 14:30:54
【问题描述】:

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

看图。

为什么会这样,有什么想法吗?

另一张照片

【问题讨论】:

  • 我会说您的 GUI 的列太窄了。如果您的查询确实返回值不是'CMN00632' 的行,那么是的,有一些可怕的错误,因为您的数据库不知道= 的含义。
  • 我支持 Wooble 的假设。我也怀疑 GUI 会在最后切断那 2 个。
  • 没有。宽度不是问题! @Wooble
  • 看起来像吗? - 惠康。那就是问题所在。长度为8,值为7。其中有CMN00632,结果中有CMN0063
  • 如果WHERE 子句确实产生了您声称的结果,您可能需要切换到一个有效的数据库。虽然我怀疑如果 = foo 现在在 Oracle 中意味着 LIKE foo%,人们现在应该已经注意到了。

标签: sql oracle plsqldeveloper


【解决方案1】:

让我们明确一点: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';

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 你错了。整个值是 CMN0063 而不是 CMN00632
    • @levi 不,DerekFloss 是正确的。如果值为 CMN0063,您的查询将不返回任何结果(因为您的 WHERE 子句中有 CMN00632)。赞成的答案。
    • @FrankSchmitt,不!结果就是重点!
    • @levi 我不知道您所说的“结果和重点”是什么意思,但是您确实在查询中输入了“where tname = 'CMN00632”,因此,您不会使用 tname 'CMN0063' 获得任何结果。由于您似乎正在使用 PL/SQL Developer,请尝试在命令窗口中运行它,或尝试增加列宽(正如其他人向您建议的那样) - 您将看到您的列值确实是 'CMN00632'。
    【解决方案3】:

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

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

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

    select '123456789' as test from merchants;

    我打赌这会在您正在使用的编辑器中以 1234567 的形式给出结果。

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

    【讨论】:

    • @levi : select 'CMN00632' as test from merchants; 得到什么
    • @FahimParkar - 任何环境格式都将与 列名 而不是表相关联。
    猜你喜欢
    • 2016-06-14
    • 2015-03-04
    • 1970-01-01
    • 2016-05-13
    • 2021-03-11
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多