【问题标题】:Difference between varchar2(16 Char) and varchar2(16)varchar2(16 Char) 和 varchar2(16) 的区别
【发布时间】:2017-09-25 04:17:27
【问题描述】:

在一个表中,我将字段定义为

FORACID VARCHAR2(16 CHAR)

查询输出:select foracid from tbaadm.gam where rownum <= 5;

FORACID
----------------------------------------------------------------
00000063011015
00000063011028
00000063011024
00000063011023
00000441021004

在另一个表中,我将字段定义为

FORACID VARCHAR2(16)

查询输出:select foracid from tbaadm.gam where rownum <= 5;

FORACID
----------------
0382010021491
UB3
3667
PCAP
LO-CCA2

您可以看到,在第一个查询中,spool 的大小为 64(即 16 char 即 16*4=64) 在第二个查询中,spool 大小为 16(即 16 字节,即 16*1 = 16)

如何使第一个查询的假脱机输出也只显示 16 大小。? 有可能吗?

【问题讨论】:

  • VARCHAR2(16 CHAR) 将存储 16 个字符,而 VARCHAR2(16) 是 VARCHAR2(16 BYTE) 的简写,它将存储 16 个字节(因此对于多字节字符,它将存储少于 16 个字符)。
  • @MT0:我不认为这是完全正确的。 VARCHAR2(16) 的含义取决于 NLS_LENGTH_SEMANTICS 的设置方式。请参阅this question 以获得更好的解释。
  • @BobJarvis 默认是BYTE 但是,是的,我同意它取决于那个参数。

标签: oracle sqlplus spool


【解决方案1】:

您可以通过在查询前发出formatting directives 来format SQL/Plus reports (spooled queries)

COLUMN FORACID FORMAT A16;                          -- A = Alphabetic, 16 = Column Width
SELECT FORACID FROM tbaadm.gam WHERE ROWNUM <= 5;

【讨论】:

    猜你喜欢
    • 2019-06-29
    • 1970-01-01
    • 2011-05-29
    • 2017-05-26
    • 2013-12-23
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    相关资源
    最近更新 更多