我想知道如果初始化参数'BLACK_TRIMMING'设置为TRUE,CHAR类型的列数据是如何存储的。
所有的空格都被裁剪并存储到最后一个非空格字符,这样对吗?ex)
-- 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个数据。我想知道这两个数据是如何存储的。
'Hello' 'World' 'Hello World'
数据是这样存储的吗?
1条答案
按热度按时间qgzx9mmu1#
有关此类问题,请参阅Oracle
BLANK_TRIMMING
文档:1.35 BLANK_TRIMMING
BLANK_TRIMMING
指定字符数据表的数据赋值语义。数值
TRUE
允许将源字符串或变量分配给目标字符列或变量,即使源长度大于目标长度也是如此。但是,在这种情况下,目标长度之外的附加长度必须全部为空白,否则将引发异常条件。此值符合SQL-92过渡级别及更高级别的语义。
FALSE
如果源长度大于目标长度,则不允许数据分配,并恢复为SQL 92入门级语义。
因此,当且仅当超出列长度的字符都是空白时,此参数使您能够将值插入到超出列长度的列中。
所有的空格都被裁剪并存储到最后一个非空格字符,这样对吗?
否,如果你有一个
CHAR(20)
列,它仍然会存储所有20个字节(或字符),并会填充较短的值,使它们有20个字节。它所做的就是让所有这些查询都能工作:
第一个将被填充为
Hello
,第二个和第三个都将存储Hello World!
,因为第二个完全填充了列,第三个将从字符串的右侧修剪空白字符,非空白字符适合列。