Oracle中BLANK_TRIMMING设为TRUE时,CHAR类型数据如何存储?
Oracle初始化参数BLANK_TRIMMING=TRUE时CHAR列的存储规则
当Oracle的初始化参数BLANK_TRIMMING设置为TRUE时,CHAR类型列的存储行为明确如下:
- 插入数据时,尾部的所有空格会被自动截断,仅保留到最后一个非空格字符的位置,不会按照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 ');
三条数据的实际存储内容如下:
- 第一条:
'Hello'(无尾部空格) - 第二条:
'World'(原尾部的三个空格被截断) - 第三条:
'Hello World'(原尾部的三个空格被截断,中间的空格保留)
你可以通过以下SQL验证存储的实际长度和内容:
SELECT c1, LENGTH(c1) AS actual_length FROM t;
执行后会返回:
| C1 | ACTUAL_LENGTH |
|---|---|
| Hello | 5 |
| World | 5 |
| Hello World | 11 |
可见实际存储的字符长度均为非空格内容的长度,而非CHAR定义的20。
内容的提问来源于stack exchange,提问作者HeetCho
相关产品推荐
相关产品推荐

