sql - SQLPlus 报告中的列显示时间超过数据库列大小
问题描述
我有许多以前可以正常工作的 sql 报告。然而,最近它们开始输出,列宽比应有的长。根据Oracle的文档,如果sql报告中的列在报告COLUMN
的开头没有明确的“”定义,例如' column example_col heading "Eg col" format A50
',它应该以与数据库表中列的定义相同的宽度显示,即如果列被定义为varchar2(10)
它应该以 10 个字符的宽度显示。
以前这很好,但是最近这些列中的一些已经开始以更大的宽度显示,这导致报告的行超出 linesize 延伸到第二行,从而使报告的可读性降低。
我只是想看看是否有人以前遇到过这种行为并且可能知道可能是什么原因?以下是其中一份报告的前后图片,以便您查看问题所在。
解决方案
事实证明,问题在于将 NLS_LANG 环境变量设置为 AMERICAN_AMERICA.AL32UTF8。这会导致在 SQLPlus 中输出时扩展列宽。解决方案是将此环境变量更改为 AMERICAN_AMERICA.WE8ISO8859P1。
来自相关 Oracle Metalink 的详细信息如下:
症状 在不同的 SQL*Plus 会话中运行相同的语句会导致输出长度不同。
第 1 节:
SQL> select sysdate, sysdate from dual; SYSDATE SYSDATE
30-OCT-08 30-OCT-08
第 2 节:
SQL> select sysdate, sysdate from dual; SYSDATE SYSDATE
30-OCT-08 30-OCT-08
原因 NLS_LANG 字符集决定了输出的显示方式。
使用多字节字符集时,列宽会更大。解决方案 为 NLS_LANG 设置字符集以获得想要的输出。如果您需要“长”输出,请使用 UTF8 作为字符集。确保客户端操作系统可以处理选择的字符集。
推荐阅读
- mysql - 数 GB 大小的 innodb 数据文件
- scala - scala.util.Try 块的返回值
- html - Bootstrap 手风琴仅适用于 4 上的 2 个项目
- python - .only().prefetch_related() 给出 'ManyToOneRel' 对象没有属性 'attname'
- excel - 显示滚动时组合框有问题
- c# - 使用 Predicate Builder 的表达式太长
- angular - “ContactComponent”类型上不存在属性“formSubmitted”
- reactjs - 单个输入上的多个字段名称
- ruby-on-rails - 为什么 Rails 不返回 TimeWithZone 范围?
- git - git commit 上的“没有这样的文件或目录”错误