Oracle 专题
专题目录
您的位置:database > Oracle专题 > Oracle Char类型
Oracle Char类型
作者:--    发布时间:2019-11-20

在本教程中将学习oracle char数据类型,它是一种固定长度的字符串类型。

oracle char数据类型简介

oracle char数据类型用于存储固定长度的字符串。 char数据类型可以存储12000字节的字符串。

要定义一个char列,需要用字节或字符来指定一个字符串长度,如下所示:

char(length byte)
char(length char)

如果没有明确指定bytechar,那么oracle会默认使用byte

如果像下面的例子那样不指定长度,那么长度的默认值是1

column_name char

插入或更新固定长度字符串列时,oracle将字符存储为固定长度数据。 这意味着如果存储的值的长度小于列中定义的最大长度,则oracle将空格填充到最大长度的字符串。 如果插入一个长度大于列的值,oracle会返回一个错误。

oracle使用空格填充后来比较char值。

oracle char例子

下面来看看一些例子来理解char数据类型的工作原理。

1. 空格使用的例子

首先,创建一个由char列(x)和varchar2列(y)组成的新表t。 每列的长度是10个字节。

create table t (
    x char(10),
    y varchar2(10)
);

其次,用xy列的相同数据在t表中插入一个新行:

insert into t(x, y )
values('oracle', 'oracle');

第三,通过使用以下查询验证插入:

select
    *
from
    t

执行上面示例代码,得到以下结果 -

以下语句从t表中检索数据:

select
    x,
    dump(x),
    y,
    dump(y)
from
    t;

执行上面查询代码,得到以下结果 -

在这个例子中,使用了dump()函数来返回xy列的详细信息:

字符串oracle需要6个字节。 但是,oracle在字符串的右侧再填充4个空格,使x列的长度为10个字节。 y列的情况并非如此,因为y列的数据类型是可变长度字符串类型:(varchar2)

如果使用lengthb()函数来获取xy列使用的字节数,则更加清楚:

select
    lengthb(x),
    lengthb(y)
from
    t;

执行上面查询代码,得到以下结果 -

2. 字符比较示例

以下语句返回相同的结果:

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列在空间使用和字符比较方面的行为。


网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册