oracle 如果BLANK_TRIMMING参数设置为TRUE,CHAR类型如何存储?(甲骨文)

v09wglhw  于 2023-10-16  发布在  Oracle
关注(0)|答案(1)|浏览(115)

我想知道如果初始化参数'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'
数据是这样存储的吗?

qgzx9mmu

qgzx9mmu1#

有关此类问题,请参阅Oracle BLANK_TRIMMING文档:

1.35 BLANK_TRIMMING

BLANK_TRIMMING指定字符数据表的数据赋值语义。

数值

  • TRUE

允许将源字符串或变量分配给目标字符列或变量,即使源长度大于目标长度也是如此。但是,在这种情况下,目标长度之外的附加长度必须全部为空白,否则将引发异常条件。此值符合SQL-92过渡级别及更高级别的语义。

  • FALSE

如果源长度大于目标长度,则不允许数据分配,并恢复为SQL 92入门级语义。
因此,当且仅当超出列长度的字符都是空白时,此参数使您能够将值插入到超出列长度的列中。
所有的空格都被裁剪并存储到最后一个非空格字符,这样对吗?

,如果你有一个CHAR(20)列,它仍然会存储所有20个字节(或字符),并会填充较短的值,使它们有20个字节。

它所做的就是让所有这些查询都能工作:

CREATE TABLE table_name(column_name CHAR(12));

INSERT INTO table_name (column_name) VALUES ('Hello');
INSERT INTO table_name (column_name) VALUES ('Hello World!');
INSERT INTO table_name (column_name) VALUES ('Hello World!          ');

第一个将被填充为Hello,第二个和第三个都将存储Hello World!,因为第二个完全填充了列,第三个将从字符串的右侧修剪空白字符,非空白字符适合列。

相关问题