SQLDeveloper用空格填充char中的剩余空间

我有一个数据类型为 char(256) 的属性。我通过 SQL Developer 从 csv 文件导入该值当该属性获得一个包含 10 个字符的值时,剩余空间将被空格填充。

我知道 char 静态分配空间,但这是否也意味着我得到了一个类似 "abc " 格式的字符串?

因为这使得具有相等运算符的 sql 语句变得困难。

回答

您在错误的观念下运作;它与 SQL Developer 无关。

CHAR数据类型是一个固定长度的字符串; 如果您没有提供完整长度的字符串,那么 Oracle 将用空格 (ASCII 32) 字符右填充该字符串,直到它具有正确的长度。

从文档:

CHAR 数据类型

CHAR数据类型存储固定长度的字符串。创建包含CHAR列的表时,必须为CHAR列宽指定介于 1 到 2000 字节之间的字符串长度(以字节或字符为单位)。默认值为 1 个字节。然后 Oracle 保证:

  • 在表中插入或更新行时,CHAR列的值具有固定长度。
  • 如果您给出较短的值,则该值将被空白填充到固定长度。
  • 如果值太大,Oracle 数据库会返回错误。

Oracle 数据库CHAR使用空白填充的比较语义来比较值。

为了解决这个问题,不要使用CHAR变长字符串,VARCHAR2而是使用。

VARCHAR2VARCHAR数据类型

VARCHAR2数据类型存储可变长度的字符串。创建包含VARCHAR2列的表时,请为列指定介于 1 到 4000 字节之间的最大字符串长度(以字节或字符为单位)VARCHAR2。对于每一行,Oracle 数据库将列中的每个值存储为可变长度字段,除非值超过列的最大长度,在这种情况下 Oracle 数据库返回错误。使用VARCHAR2VARCHAR节省桌子使用的空间。


以上是SQLDeveloper用空格填充char中的剩余空间的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>