为什么我不能 trim CHAR 类型的列?

Why can't I trim a column of type CHAR?

如标题所说,如果在我的数据库中创建 table :

创建 TABLE 测试 ( FIELD CHAR(20 CHAR) NULL ) 无记录 无压缩 NOCACHE;

插入这个:

插入测试 (场地) 价值观 ('TEST -here are blank spaces- '); 提交;

然后我运行下面的语句:

更新测试集字段 = TRIM(字段); 提交;

但是该字段仍然有空格,请注意,如果我将数据类型更改为 varchar2,它会起作用...有人知道为什么吗?

谢谢!

char 是固定宽度的数据类型。 char(20) 的长度永远为 20。如果您尝试插入较短的字符串,它将用空格填充到该字段的固定宽度长度。所以

UPDATE TEST SET FIELD = TRIM(FIELD); 

由于 trim 函数删除了空格,然后将它们添加回去,因为写入的字符串必须恰好为 20 个字节长。

实际上,几乎没有使用 char 的情况。 varchar2 你几乎总是过得更好。 varchar2 是可变长度数据类型,因此数据库不需要将空格附加到末尾。