我在 Oracle 数据库中有一个表,其列类型是
char(100)
。
身份证 | 价值 |
---|---|
1 | 测试 |
插入时,“测试”值由 oracle 填充为空白。 当我从数据库中选择这一行时,我必须修剪它以获得非填充值。
select trim(value) from mytable where id = 1
这没有意义,因为它不是实际插入的值。有没有任何解决方案可以在不使用
trim
或将列类型更改为 varchar
的情况下获取实际的非填充值?
简短的回答是“不”,没有办法做到这一点。
CHAR
数据类型会自动将您插入的值填充到列的完整大小。根据我的经验,很少使用 CHAR
,因为它会占用磁盘空间并增加存储要求,即使对于空值也是如此。如果您只想存储数据而不进行填充,则必须使用 VARCHAR2
。
请参阅此处:https://www.oracletutorial.com/oracle-basics/oracle-char/
当插入或更新固定长度字符串列时, Oracle 将字符存储为定长数据。
这意味着如果您存储的值的长度小于 列中定义的最大长度,Oracle 将空格填充到 字符串达到最大长度。