作者:幻灵风 | 来源:互联网 | 2023-10-10 14:01
我有一个数据类型为 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
而是使用。
VARCHAR2
和VARCHAR
数据类型该VARCHAR2
数据类型存储可变长度的字符串。创建包含VARCHAR2
列的表时,请为列指定介于 1 到 4000 字节之间的最大字符串长度(以字节或字符为单位)VARCHAR2
。对于每一行,Oracle 数据库将列中的每个值存储为可变长度字段,除非值超过列的最大长度,在这种情况下 Oracle 数据库返回错误。使用VARCHAR2
并VARCHAR
节省桌子使用的空间。