【问题标题】:PL/SQL Developer - last character is missing in the results gridPL/SQL Developer - 结果网格中缺少最后一个字符
【发布时间】:2019-08-18 11:28:30
【问题描述】:

我们有一个列名为A 的表,类型为nvarchar(23)

后面的查询总是会返回23,也就是说所有记录的实际长度都是23

select length(trim(req.A)), count(*)
  from tableName req
group by length(trim(req.A));
|长度(修剪(req.A))|计数(*)| ------------------------------ |23 |1006 |

但是,当我们使用以下查询从该表中进行选择时,它的行为会有所不同,并且似乎总是在 PL/SQL Developer 的结果 Gridview 中删除最后一个字符。

select LENGTHB(req.A) lenb, length(req.A) len, req.* from tableName req
where req.A = 'NHBBBBB1398052635902235'; -- Note to the equal sign and the last charactar (5) of the where clause

结果是:

|lenb|len|一个 | --------------------------------- |46 |23 |NHBBBB139805263590223|

如您所见,最后一个字符 (5) 在选择结果中被删除。

此外,当我们使用 to_char() 重写之前的查询时,它工作正常并返回正确的结果,长度为 23 和 (5) 作为最后一个字符。

select LENGTHB(req.A) lenb, length(req.A) len, to_char(req.A) from tableName req
where req.A = 'NHBBBBB1398052635902235';

结果是:

|lenb|len| to_char(req.A) | ---------------------------------- |46 |23 |NHBBBB1398052635902235|

你能解释一下发生了什么吗!?这与 PL/SQL Developer 配置有关吗?如何解决?

【问题讨论】:

  • PL/SQL 和 PL/SQL Developer 是两个完全不同的东西。我想你的意思是第二个。
  • @WilliamRobertson 是的,你是对的。坦克

标签: oracle plsqldeveloper string-length


【解决方案1】:

我认为这是由您连接的 oracle db 的不同字符集和您执行该查询的客户端引起的错误。 一些字符集是一个多字节字符集,例如 'AL32UTF8' 字符集,它可以使用多个字节来存储一个字符。

因此您可以使用以下方法检查数据库的字符集:

select * from nls_database_parameters where parameter like '%SET%';

并尝试将NLS_LANG 字符集设置为您的客户端应用程序使用的字符集,然后重试。

希望有帮助。

【讨论】:

  • 谢谢。我们的生产环境是完全隔离的,请求这种操作需要经过一堆烦人的“官僚层”!不幸的是,我们无法在我们的开发/测试环境中重现这种行为。无论如何,非常感谢。
【解决方案2】:

问题似乎是我们的客户使用的旧版本的 PL/SQL Developer。当他们更新到较新的版本时,问题已经解决了。

【讨论】:

    猜你喜欢
    • 2011-04-06
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多