【发布时间】: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但是,是的,我同意它取决于那个参数。