我有一个数据类型为 char(256) 的属性。我通过 SQL Developer 从 csv 文件导入值 当属性获得一个包含 10 个字符的值时,剩余的空间会被空格填充。
我知道 char 是静态分配空间的,但这是否也意味着我得到了一个类似 "abc " 格式的字符串?
因为这使得具有相等运算符的 sql 语句变得困难。
答案 0 :(得分:6)
您的经营理念有误;它与 SQL Developer 无关。
CHAR
数据类型是固定长度的字符串;如果您不提供完整长度的字符串,那么 Oracle 将用空格 (ASCII 32) 字符右填充该字符串,直到它具有正确的长度。
CHAR
数据类型CHAR
数据类型存储固定长度的字符串。创建包含 CHAR
列的表时,您必须为 CHAR
列宽度指定介于 1 到 2000 字节之间的字符串长度(以字节或字符为单位)。默认值为 1 个字节。然后 Oracle 保证:
CHAR
列的值具有固定长度。Oracle 数据库使用空白填充比较语义比较 CHAR
值。
要解决此问题,请不要将 CHAR
用于可变长度字符串,而是使用 VARCHAR2
。
VARCHAR2
和 VARCHAR
数据类型VARCHAR2
数据类型存储可变长度的字符串。创建包含 VARCHAR2
列的表时,您可以为 VARCHAR2
列指定介于 1 到 4000 字节之间的最大字符串长度(以字节或字符为单位)。对于每一行,Oracle 数据库将列中的每个值存储为可变长度字段,除非值超过列的最大长度,在这种情况下 Oracle 数据库返回错误。使用 VARCHAR2
和 VARCHAR
可以节省表格使用的空间。
答案 1 :(得分:1)
您可以使用 varchar2 而不是 char 作为数据类型来避免这种情况。
或者您可以使用 rtrim(columnname) 修剪查询中的数据。