📜  Oracle中char、varchar和VARCHAR2的区别

📅  最后修改于: 2022-05-13 01:58:10.744000             🧑  作者: Mango

Oracle中char、varchar和VARCHAR2的区别

1.字符:
char 数据类型用于存储字符值。它是一个固定长度的数据类型,即一旦初始化,我们就不能在执行时改变大小。因此,它也被称为静态数据类型。
它也用于存储普通字符和字母数字字符。 char 数据类型可以存储最大长度为 2000字符的字符串。此外,对于每一个字符,一个字节存储在内存中。由于大小是固定的,无法更改,因此会导致内存浪费。
Forex : 如果你在 char(10) 中存储 5 个字符,那么这 5 个字节将被 oracle 存储,剩余的 5 个字节将被填充到右侧导致内存浪费,如文章后半部分的示例所示.
.
语法如下。

char_name CHAR(length BYTE)
char_name CHAR(length CHAR)

注意:如果没有明确指定字符的大小,那么 oracle 将默认分配 1 个字节,如下所示。

// Assigns 1 byte
char_name CHAR 

2. VARCHAR:
VarChar 数据类型用于存储字符值。它是一种可变长度数据类型,即我们可以在执行时更改字符的大小。因此,它也被称为动态数据类型。
它也用于存储普通字符和字母数字字符。 字符串数据类型可以存储最大长度为4000 字节的字符。此外,对于每一个字符,一个字节存储在内存中。

VARCHAR 是一个 ANSI 标准,用于区分空字符串和空字符串。但是,在 Oracle 中 VARCHAR 和 VARCHAR2 是完全一样的。
建议不要使用 VARCHAR,因为 Oracle 可能会在不久的将来更改其用法。

语法如下:

char_name VARCHAR(length BYTE)
char_name VARCHAR(length CHAR)

3. VARCHAR2:
VARCHAR2 与 oracle 数据库中的 VARCHAR 相同。主要区别在于 VARCHAR 是 ANSI 标准,而 VARCHAR2 是 Oracle 标准。
VarChar2 数据类型用于存储字符值。它是一种可变长度数据类型,即我们可以在执行时更改字符变量的大小。因此,它也被称为动态数据类型。
它也用于存储普通字符和字母数字字符。 VARCHAR2 数据类型可以存储最大长度为 4000字符的字符串。此外,对于每一个字符,一个字节存储在内存中。由于它是动态数据类型,因此不会浪费内存。
外汇:如果您在 char(10) 中存储 5 个字符,那么 Oracle 将只存储 5 个字节,而不是 VARCHAR 和 CHAR 的情况下的 10 个字节。

语法类似于 VARCHAR

char_name VARCHAR2(length BYTE)
char_name VARCHAR2(length CHAR)

// allocates length bytes of character
char_name VARCHAR2(length) 

现在,让我们通过 Oracle 数据库中的查询进一步了解其中的区别。

让我们创建一个表,其中分别包含 char、varchar 和 varchar2 的三个变量 a、b、c。

// creating a table
create table t(a char(10) , b varchar(10) , c varchar2(10)) 

将值插入表中

// inserting the values in the table
insert into t(a,b,c) values('rahul','krishna','loki') 
// for displaying table values
select * from t; 

检索 a 和 b 的详细信息

// dump() function is used to obtain detailed information of a and b 
select a,dump(a),b,dump(b),c,dump(c) from t 

正如您在上面的示例中看到的:

  1. Rahul 以 char 数据类型存储,长度为 5 个字符。由于它是一个 Char 变量,Oracle 为 Rahul 分配空间,其余 5 个字符填充到右侧。这会导致内存浪费。
  2. Krishna 以 VarChar 数据类型存储,长度为 7 个字符。由于它是 VarChar 变量,Oracle 为所有 7 个字符分配空间,这与 VarChar 中的情况不同。
  3. Loki 以 VarChar2 数据类型存储,长度为 4 个字符。由于它是一个 VarChar2 变量,它只为所有 4 个字符分配空间,即使我们将大小声明为 10 个字节,类似于第二点中讨论的 Krishna。

Oracle 中 char、varchar 和 VARCHAR2 的区别:

Sno   

Char

VarChar/VarChar2

1Char stands for “Character”VarChar/VarChar2 stands for Variable Character
2It is used to store character string of fixed lengthIt is used to store character string of variable length
3It has a Maximum Size of 
2000 Bytes
It has a Maximum Size of 4000 Bytes  
4Char will pad the spaces to the right side to fill the length specified during the DeclarationVarChar will not pad the spaces to the right side to fill the length specified during Declaration. 
5It is not required to specify the size at the time of declaration. It will take 1 Byte as default It is  required to specify the size at the time of declaration
6It is Static Datatype(i.e Fixed Length)It is Dynamic Datatype(i.e Variable Length)
7It can lead to memory wastage It manages Memory efficiently
8It is 50% much faster than VarChar/VarChar2 It is relatively slower as compared to Char

注意: Oracle 中的 VarChar 和 VarChar2 没有区别。但是,建议不要使用 VarChar 来存储数据,因为它是为将来用于存储其他类型的变量而保留的。因此,始终使用 VarChar2 代替 VarChar。

因此,当字符的字符串是固定的并且以后不会改变时,建议使用 Char 数据类型。
如果字符的长度不固定,则首选字符串 。