SQL Developer 用空格填充 char 中的剩余空间

时间:2021-01-17 12:24:03

标签: sql oracle

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

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

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

2 个答案:

答案 0 :(得分:6)

您的经营理念有误;它与 SQL Developer 无关。

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

来自documentation

<块引用>

CHAR 数据类型

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

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

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

要解决此问题,请不要将 CHAR 用于可变长度字符串,而是使用 VARCHAR2

<块引用>

VARCHAR2VARCHAR 数据类型

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

答案 1 :(得分:1)

您可以使用 varchar2 而不是 char 作为数据类型来避免这种情况。

或者您可以使用 rtrim(columnname) 修剪查询中的数据。

相关问题