首页 > 解决方案 > SQL Developer 用空格填充 char 中的剩余空间

问题描述

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

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

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

标签: sqloracle

解决方案


您是在误解下经营的;它与 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节省表使用的空间。


推荐阅读