在本教程中将学习oracle char
数据类型,它是一种固定长度的字符串类型。
oracle char
数据类型用于存储固定长度的字符串。 char
数据类型可以存储1
到2000
字节的字符串。
要定义一个char
列,需要用字节或字符来指定一个字符串长度,如下所示:
char(length byte)
char(length char)
如果没有明确指定byte
或char
,那么oracle会默认使用byte
。
如果像下面的例子那样不指定长度,那么长度的默认值是1
。
column_name char
插入或更新固定长度字符串列时,oracle将字符存储为固定长度数据。 这意味着如果存储的值的长度小于列中定义的最大长度,则oracle将空格填充到最大长度的字符串。 如果插入一个长度大于列的值,oracle会返回一个错误。
oracle使用空格填充后来比较char
值。
下面来看看一些例子来理解char
数据类型的工作原理。
首先,创建一个由char
列(x
)和varchar2
列(y
)组成的新表t
。 每列的长度是10
个字节。
create table t (
x char(10),
y varchar2(10)
);
其次,用x
和y
列的相同数据在t
表中插入一个新行:
insert into t(x, y )
values('oracle', 'oracle');
第三,通过使用以下查询验证插入:
select
*
from
t
执行上面示例代码,得到以下结果 -
以下语句从t
表中检索数据:
select
x,
dump(x),
y,
dump(y)
from
t;
执行上面查询代码,得到以下结果 -
在这个例子中,使用了dump()
函数来返回x
和y
列的详细信息:
字符串oracle需要6
个字节。 但是,oracle在字符串的右侧再填充4
个空格,使x
列的长度为10
个字节。 y
列的情况并非如此,因为y
列的数据类型是可变长度字符串类型:(varchar2)
。
如果使用lengthb()
函数来获取x
和y
列使用的字节数,则更加清楚:
select
lengthb(x),
lengthb(y)
from
t;
执行上面查询代码,得到以下结果 -
以下语句返回相同的结果:
select * from t where x = 'oracle';
select * from t where y = 'oracle';
但是,如果使用绑定变量,效果是不同的。考虑下面的例子:
sql> variable v varchar2(10)
sql> exec :v := 'oracle';
pl/sql procedure successfully completed.
在这个代码块中,将v
声明为具有varchar2
数据类型的绑定变量。
现在,使用v
作为输入来与x
列进行比较:
sql> select * from t where x = :v;
no rows selected
该语句返回一个空的结果集。以下查询使用v
变量与y
列进行比较:
sql> select * from t where y = :v;
x y
---------- ----------
oracle oracle
它按预期返回了一行。这是因为在比较长度不等的字符类型的字符串时,oracle使用非空格字符填充语义。
要使其工作,需要使用rtrim()
函数从char数据中去除空格,然后将其与输入字符串进行比较,如下所示:
sql> select * from t where rtrim(x) = :v;
x y
---------- ----------
oracle oracle
在本教程中,您已经了解了oracle char
数据类型,并了解了char
列在空间使用和字符比较方面的行为。