关于char与varchar,varchar2的区别

如上面所说

1、处理速度

char 和相同长度的varchar处理速度差不多。varchar的长度不会影响处理速度;

2、string

O/R Mapping中对应实体的属性类型一般是以string居多,用char[]的非常少,所以如果按mapping的合理性来说,可变长度的类型更加吻合;varchar的存放和string是一样原理的,即length {block}这种方式,所以varchar的长度和它实际占用空间是无关的;

3、查询成本

char和varchar的比较成本是一样的,现在关键就看它们的索引查找的成本了,因为查找策略都一样,因此应该比较谁占用空间小。

例:

在存放相同数量的字符情况下,如果数量小,那么char占用长度是小于varchar的,但如果数量稍大,则varchar完全可能小于char,而且要看实际填充数值的充实度,比如说varchar(3)和char(3),那么理论上应该是char快了,但如果是char(10)和varchar(10),充实度只有30%的情况下,理论上就应该是varchar快了。

因为varchar需要额外空间存放块长度,所以只要length(1-fillfactor)大于这个存放空间(好像是2字节),那么它就会比相同长度的char快了。

扩展资料:

1、如果数据量非常大,又能100%确定长度且保存只是ansi字符,那么char;

2、能确定长度又不一定是ansi字符或者,那么用nchar;

3、不确定长度,要查询且希望利用索引的话,用nvarchar类型吧,将它们设到400;

4、不查询的话没什么好说的,用nvarchar(4000);

5、性格豪爽的可以只用3和4,偶尔用用1,毕竟这是一种额外说明,等于告诉别人说,我一定需要长度为X位的数据。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-12-05

1、长度上的区别

CHAR的长度是固定的,VARCHAR2的长度是可以变化的。

例如,存储字符串“abc",对于CHAR (20),表示存储的字符占20个字节,而同样的VARCHAR2 (20)就只占3个字节的长度,20只是最大值,而且当存储的字符小于20时,按实际的长度来存储。 

2、意义上的区别

VARCHAR是VARCHAR2的同义词,工业标准的VARCHAR类型可以用来存储空字符串,但是Oracle自己开发了一个数据类型VARCHAR2,这个类型不是一个标准的VARCHAR,它在数据库中varchar列可以存储空字符串的特性改为存储NULL值。

******

3、空间大小上的区别

VARCHAR2比CHAR要节省空间,VARCHAR2在效率上也比CHAR差一些,所以如果想获得效率,就必须牺牲一定的空间,这就是在数据库设计上常说的‘以空间换效率’。 

VARCHAR2虽然比CHAR节省空间,但如果一个VARCHAR2列经常被修改,且每次被修改数据的长度不同会引起‘行迁移’现象。

第2个回答  2012-03-23
区别:
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会更好一些。
第3个回答  推荐于2018-05-18
char:
使用指定长度的固定长度表示的字符串;比如char(8),则数据库会使用固定的8个字节来存储数据

,不足8为的字符串在其后补空字符;
varchar
在oracle中varchar跟char是一个类型;sqlserver中varchar相当于oracle中的varchar2
varchar2
用实际字符数+2个字节来存储的变长字符串;比如一个字段定义为varchar(10),而实际存储的内容为

‘A’,则数据库会用3个字节来存储该字符串,其中前两个字节用来存储字符的长度;
在数据库中的字段,由于一个字段大小不能超过一个block的长度,所以varchar和char都是最大为

8000个字节,由于可能会存储汉字,也就是一个字符用2个字节来存储,所以字段中最大定义为varchar

(4000),而在plsql中,这个大小的限制变为32000左右,这是因为表示其大小的字节只有两个。本回答被提问者和网友采纳
第4个回答  2015-05-31
二者都是字段的字符数据类型,这点是相同的,主要不同在于二者的存储办法,以及查询。
char是固定长度的,而varchar是不固定长度的。
比如:某字段的格式为char(8)。那么这个字段的长度就是8,就算你仅仅存了一个字符a,它占用的空间也是8个长度的字符占用的空间的大小,也就是说char比较浪费存储空间。
相对而言,varchar就是一个可以变的字符类型,比如varchar2(8)表示最长可以存8位的字符,但是如果你仅仅存了一个a,那么这个a占用的存储仅仅为它本身占用的一个字符长度。
也就是说从存储来说:varchar2比char节省一些空间。
从查询来说:这个没有实际的例子证明,但是大部分人认为char字段的查询比varchar要快一些,但是我估计除非数据量特别大,不然这点看不太出来的。
char和varchar2区别在哪
1、char的长度是不可变的,而varchar的长度是可变的 字段b:类型char(10), 值为:abc,存储为:abc (abc+7个空格)字段d:类型varchar(10), 值为:abc,存储为:abc (自动变为3个的长度)2、超出长度自动截取 字段c:类型char(3), 值为:abcdefg,存储为:abc(defg自动删除)...

char、varchar、varchar2、nvarchar2、nvarchar的区别与使用
长度赋值char长度固定,范围为1至8,000字节;varchar和nvarchar的长度可变,varchar(max)适合存储大量数据。当存储数据时,应根据大小差异灵活选用,char适用于数据一致性高的场景,而varchar则处理大小差异大的情况。Oracle推荐Oracle倾向于使用varchar2和nvarchar2,因为它们在处理空字符串和多字节字符时更加直...

char、varchar、varchar2、nvarchar2、nvarchar的区别与使用
2. varchar和varchar2是可变长度类型,存储大小根据输入数据的实际长度加2个字节。varchar2与varchar类似,但所有字符都占两字节。对于英文或中英文混合,存储效率取决于数据的大小差异。3. nvarchar和nvarchar2也是可变长度,但支持Unicode编码,对于中文字符,存储的是字符数而非字节数。nvariantchar2与nvari...

char和varchar2区别
char和varchar2的主要区别体现在存储方式和空间效率上:存储方式:char:是固定长度的字符数据类型。定义一个char字段时,需要指定长度,系统会为该字段分配指定的空间,无论实际存储的字符长度如何。如果实际存储的字符长度小于指定长度,系统会用空格填充剩余空间。varchar2:是可变长度的字符数据类型。varchar...

char varchar varchar2 的区别
1、处理速度 char 和相同长度的varchar处理速度差不多。varchar的长度不会影响处理速度;2、string O\/R Mapping中对应实体的属性类型一般是以string居多,用char[]的非常少,所以如果按mapping的合理性来说,可变长度的类型更加吻合;varchar的存放和string是一样原理的,即length {block}这种方式,所以...

char和varchar2区别
char和varchar2的主要区别在于存储方式和空间效率。char是固定长度的字符数据类型,而varchar2是可变长度的字符数据类型。存储方式 char数据类型用于存储固定长度的字符数据。当我们定义一个char字段时,我们需要指定一个长度。不论我们实际存储的字符长度如何,char类型都会为这个字段分配指定的空间。例如,如果...

数据库varchar和char的区别
CHAR类型在处理文本数据时,效率略高于VARCHAR2。这主要因为CHAR类型的数据存储更加紧凑,不需要额外的空间来记录数据的实际长度。然而,这种效率提升是以牺牲存储空间为代价的。在工业标准中,VARCHAR类型能够存储空字符串,但Oracle对此有不同的处理方式。Oracle将VARCHAR类型定义为VARCHAR2类型的一个变体,它...

Oracle数据类型
Oracle数据库中,CHAR、VARCHAR、VARCHAR2、NCHAR、NVARCHAR2和它们的变种类型各有所长,适用于不同的场景。理解它们之间的区别对于高效使用数据库至关重要。1. CHAR与VARCHAR2的差异主要在于长度固定与可变。CHAR存储固定长度,即使内容不满,也会占用固定字节,而VARCHAR2长度可变,节省空间。尽管CHAR效率略...

char和varchar区别
区别一:首先明确的是,baichar的长度是du不可变的,zhi而varchar的长度是可变的,区别二:定义一个char[10]和varchar[10],如果存进去的dao是‘abcd’,那么char所占的长度依然为10,除了字符‘abcd’外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余...

varchar,varchar2的效率问题
CHAR与VARCHAR2是一对矛盾的统一体,两者是互补的关系.VARCHAR2比CHAR节省空间,在效率上比CHAR会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’。VARCHAR2虽然比CHAR节省空间,但是如果一个VARCHAR2列经常被修改,而且每次被修改的数据的长度不同...

相似回答