oracle中char、varchar、varchar2的区别如下
1. CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。
2.CHAR的效率比VARCHAR2的效率稍高。
3.目前VARCHAR是VARCHAR2的同义词。工业标准的VARCHAR类型可以存储空字符串,但是oracle不这样做,尽管它保留以后这样做的 权利。Oracle自己开发了一个数据类型VARCHAR2,这个类型不是一个标准的VARCHAR,它将在数据库中varchar列可以存储空字符串的 特性改为存储NULL值。如果你想有向后兼容的能力,Oracle建议使用VARCHAR2而不是VARCHAR。
何时该用CHAR,何时该用varchar2?
CHAR与VARCHAR2是一对矛盾的统一体,两者是互补的关系.
VARCHAR2比CHAR节省空间,在效率上比CHAR会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’。
VARCHAR2 虽然比CHAR节省空间,但是如果一个VARCHAR2列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用CHAR代替VARCHAR2会更好一些。
char中还会自动补齐空格,因为你insert到一个char字段自动补充了空格的,但是select 后空格没有删除
这里有个问题varchar2既然是可变的,那长度限制有什么意义呢?
在网上看到一个看法是这样:主要以下3个好处
1、 由于数据库的限制(参见Logical Database Limits),每个索引的字段的总长度不能超过75% * the database block size再减去some overhead的长度,由于有限制,所以字段的长度也限制了索引字段的大小:
SQL> create table x(
2 a varchar2(2000),
3 b varchar2(2000),
4 c varchar2(2000),
5 d varchar2(2000),
6 e varchar2(2000));
表已创建。
SQL> create table y(
2 a varchar2(10),
3 b varchar2(10),
4 c varchar2(10),
5 d varchar2(10),
6 e varchar2(10));
表已创建。
SQL> create index y_idx on y(a,b,c,d);
索引已创建。
SQL> create index x_idx on x(a,b,c,d);
create index x_idx on x(a,b,c,d)
第 1 行出现错误:
ORA-01450: 超出最大的关键字长度 (6398)
2、 字段长度能够起到一定的constraint作用,比如一个字段长度要求是10个字节,必须要设置为varchar2(10)。
3、 如果用到ARRAY FETCH,那么客户端fetch 数据需要的内存是根据定义的字段的长度,所以大的字段会需要大的内存。比如10个VARCHAR2(4000)字段,我要取100行,那么就需要4000*10*100的内存,大约是4M,但是如果定义为VARCHAR2(10),那么就需要10*10*100的内存。
相关推荐
- **性能考虑**: 使用`CHAR`作为长度单位虽然可以更高效地利用空间,但也要注意不要设置过大的字符数量限制,以免造成不必要的性能负担。 - **兼容性考虑**: 在处理国际化数据时,考虑到不同字符集下的字符宽度可能...
- **定义**:`VARCHAR` 类型在 Oracle 中实际上等同于 `VARCHAR2` 类型,是一个可变长度的字符类型。 - **示例**:如果创建了一个 `VARCHAR2(20)` 类型的字段,并插入 "abc",那么只占用 3 个字符的空间(而不是 20...
总的来说,虽然`VARCHAR`和`VARCHAR2`在名称上有一定的相似性,但在实际应用中,`VARCHAR2`因其更长的最大长度、更好的空格处理机制以及更高的兼容性,在Oracle数据库中得到了更广泛的应用。理解这些细微的区别,...
Oracle 中 char 和 varchar2 的区别 Oracle 中 char 和 varchar2 是两种常用的字符串数据类型,它们之间的区别是很多开发者经常忽视的。下面我们将详细分析 Oracle 中 char 和 varchar2 的区别。 首先,char 是定...
在Oracle数据库中,默认情况下,`VARCHAR2`类型字段的最大长度为4000个字符。当需要处理更长的字符串时(例如,超过4000个字符),可以采用多种方法来解决这一问题。本文将详细介绍如何在.NET环境中处理和传递长度...
在Oracle到MySQL的转换中,除了varchar长度之外,还需要考虑其他差异,比如数据类型的不同(如Oracle的NUMBER与MySQL的DECIMAL)、事务隔离级别、索引策略等。对于varchar字段,可能需要在转换前对源数据进行分析,...
- **空间占用**:`varchar2`在Oracle中可能有更小的最大长度限制,但通常比`varchar`更节省空间。 - **源码和工具差异**:在开发和迁移过程中,不同的数据库系统对这些类型的支持可能不同,需要根据具体环境选择合适...
* varchar2(n):可变长字符串,最大长度为 4000 字节。varchar2 类型的字符串长度可以根据实际情况变化,允许空格。 * long:无可变长字符列,最大长度限制是 2GB。 char、varchar 和 varchar2 是 Oracle 中最常用...
然而,由于`VARCHAR2`的变长特性,Oracle在处理`VARCHAR2`字段时需要额外进行语法分析,以确定每个字段的确切长度,这可能导致查询速度略慢于`CHAR`类型。 在大数据量的环境中,`VARCHAR2`通常更受欢迎,因为它能更...
- **Oracle VARCHAR2**: 用于存储变长字符串,最大长度为4000字节。 - **DB2/400 CHAR/VARCHAR**: 用于存储固定或变长的字符数据。 对于Oracle中的VARCHAR2类型,可以根据实际需求选择与DB2/400中的CHAR或VARCHAR...
Oracle 中的 VARCHAR2(n) 类型可以对应 DB2 的 CHAR(n) 和 VARCHAR(n) 类型。其中,n 代表字符的长度。对于 VARCHAR2(n) 类型,如果 n ,则使用 DB2 的 CHAR 类型或 VARCHAR 类型;如果 n > 32766,则使用 DB2 的 ...
Oracle索引被限制的一些情况 Oracle索引是关系数据库管理系统中用于提高查询效率的一种机制,但是索引的使用也存在一些限制。本文将详细介绍一些常见的限制情况,帮助开发人员更好地使用索引,提高查询效率。 限制...
**注意:** Oracle使用`rownum`来限制结果集,而DB2则使用`ROW_NUMBER()`函数来实现。 #### 十四、Returning into **Oracle:** ```sql UPDATE table SET col = new_val RETURNING col INTO v1 WHERE id = 1; ``` ...
字符数据类型包括CHAR(固定长度)、VARCHAR2(推荐使用,可变长度)和LONG(用于大段文本)。数值数据类型如NUMBER支持整数、浮点数和实数,精度可达38位。日期时间数据类型包括DATE(存储日期和时间,精确到秒)和...
`VARCHAR2` 同样用于存储变长的字符串数据,最大长度同样为4000字节。与`CHAR` 不同,`VARCHAR2` 只存储实际赋予该列的字符,并且不添加额外的空格,因此通常需要的存储空间比`CHAR` 小。此外,`VARCHAR2` 把所有...
- **`username VARCHAR2(20) UNIQUE`**:定义字段`username`的数据类型为`VARCHAR2`,最大长度为20个字符,并且设置为唯一(即不允许重复)。 - **`userpass VARCHAR2(20)`**:定义字段`userpass`的数据类型为`...
- **SSEX**: 性别,字符串类型,长度为2个字符,不允许为空。 - **SBIRTHDAY**: 出生日期,日期类型,允许为空。 - **CLASS**: 班级号,字符串类型,长度为5个字符,允许为空。 #### 1.2 COURSE 表 ```sql CREATE ...
这个版本相对较为老旧,可能存在与新版本Oracle数据库(如Oracle 11g XE)的兼容性问题,尤其是在处理大字段(如`VARCHAR2`、`CLOB`等)时。现代的Oracle数据库支持更大的字段长度,而旧版驱动可能未更新相应的处理...
- Oracle的`CHAR(n)`和`VARCHAR2(n)`对应DB2的`CHAR(n)`和`VARCHAR(n)`,但DB2的`VARCHAR(n)`最大长度为32762,Oracle为2000。 - Oracle的`LONG`类型在DB2中可以用`LONG VARCHAR(n)`或`CLOB(2GB)`替代。 - `...
例如,Oracle的NUMBER在DB2中可能需要转化为DECIMAL,而VARCHAR2则可能需要转化为VARCHAR。 此外,两个系统在处理空值(NULL)和默认值方面也略有不同,这可能影响到数据迁移和查询编写。Oracle允许为列指定默认值...