我想知道如果初始化参数'BLACK_TRIMMING'设置为TRUE,CHAR类型的列数据是如何存储的。
所有空格都被修剪并存储到最后一个非空白字符,这样正确吗? 例)
-- BLANK_TRIMMING is set TRUE
create table t(c1 char(20));
insert into t values('Hello');
insert into t values('World ');
insert into t values('Hello World ');
在此示例中,我创建了一个具有 CHAR(10) 类型列的表并插入了 2 条数据。 我想知道这两个数据是如何存储的。
‘你好’ '世界' “你好世界”
数据是这样存储的吗?
对于此类问题,请参阅 Oracle
BLANK_TRIMMING
文档:
1.35 空白_修剪
指定字符数据类型的数据分配语义。BLANK_TRIMMING
价值观
TRUE
即使源长度长于目标长度,也允许将源字符串或变量的数据分配给目标字符列或变量。然而,在这种情况下,目标长度上的附加长度必须全部为空白,否则会引发异常情况。该值符合 SQL-92 Transitional Level 及以上的语义。
FALSE
如果源长度长于目标长度,则不允许数据分配并恢复为 SQL92 入门级语义。
所以这个参数NOT以与
CHAR
类似的方式存储VARCHAR2
类型;相反,当且仅当超过列长度的字符全部为空白时,它使您能够将超过列长度的值插入到列中。