转自http://tech.ddvip.com/2007-09/118966372234359.html
在字符长度定然时char的功能比varchar好,而在长度不确定时,char种类的字段在利用时功能略差。此种情形在SQL
Server数据库下面能够揭示,并且这个字段是经常利用的。
差异:
1.char的长度是固 定的,而VARCHAR2的长度是能够改变的,
例如,存储字符串“abc",对于char
(20),表示你存储的字符将占20个字节(包括17个空字符),而同样的varchar2
(20)则只挪借3个字节的长度,20只是最大值,当你存储的字符小于20时,按切实长度存储。由于char是以安宁长度的,因而它的速度会比
varchar快得多!但过程处理起来要繁琐一点,要用trim之类的函数把两旁的空格去掉!
2.char的效率比varchar2的效率稍高。
3.现在varchar是varchar2的同义词。工业规范的varchar种类能够存储空字符串,然而oracle不这么做,尽管它保留尔后这么做的权利。Oracle自己开发了一个数据种类varchar2,这个种类不是一个规范的varchar,它将在数据库中varchar列能够存储空字符串的个性改为存储null值。万一你想有向后接受的力气,Oracle提倡利用varchar2而不是varchar。
何时该用char,何时该用varchar2?
char与varchar2是一对抵触的统一体,两者是互补的联系.
varchar比char勤俭空间,在效率上比char会轻微差一些,即要想获得效率,就定然献身定然的空间,这也即便我们在数据库设计上常说的‘以空间换效率’。
varchar2
固然比char勤俭空间,然而万一一个varchar2列经常被修正,而且每次被修正的数据的长度不同,这会引起‘行迁移’(Row
Migration)假象,而这构成剩余的I/O,是数据库设计和调剂中要竭力避免的,在这种情形下用char轮换varchar2收获会更好一些。
转自http://hi.baidu.com/wjx_5893/blog/item/ae04c4cdfc0f345d0eb345f5.html
char
安宁长度,非 Unicode 字符数据,长度为 n 个字节。n 的取值范围为 1 至 8,000,存储大小是 n 个字节。char 的
SQL 2003 同义词为 character。
varchar2
可变长度,非 Unicode 字符数据。n 的取值范围为 1 至 8,000。max 指示最大存储大小是 2^31-1
个字节。存储大小是输入数据的切实长度加 2 个字节。所输入数据的长度可感受 0 个字符。SQL-2003 中的 varchar2 即便
char varying 或 character varying。
nchar
n 个字符的安宁长度的 Unicode 字符数据。n 值定然在 1 到 4,摩托罗拉对讲机000 之间(含)。存储大小为两倍 n 字节。nchar 的 SQL-2003 同义词为
national char 和 national character。
nvarchar2
可变长度 Unicode 字符数据。n 值在 1 到 4,000 之间(含)。max 指示最大存储大小为 2^31-1
字节。存储大小是所输入字符个数的两倍 + 2 个字节。所输入数据的长度可感受 0 个字符。nvarchar2 的 SQL-2003
同义词为 national char varying 和 national character varying。
1、CHAR。CHAR存储定长数据很得体,CHAR字段上的索引效率级高,例如定义char(10),那么不论你存储的数据是否到达了10个字节,都要占去10个字节的空间,不足的积极用空格添补,因而在读取的时候可能要多次用到trim()。
2、varchar2。存储变长数据,但存储效率未曾CHAR高。万一一个字段可能的值是不安宁长度的,我们只懂得它不可能超过10个字符,把它定义为
varchar2(10)是最划算的。varchar2种类的切实长度是它的值的切实长度+1。为什么“+1”呢?这一个字节用于保留切实利用了多大的长度。从空间上琢磨,用varchar2轻便;从效率上琢磨,用char轻便,关键是依据切实情形找到权衡点。
3、NCHAR、Nvarchar2、NTEXT。这三种从名字上看比前面三种多了个“N”。它表示存储的是Unicode数据种类的字符。我们懂得字符中,英文字符只必需一个字节存储就足够了,但汉字许多,必需两个字节存储,英文与汉字同时存在时轻率构成混乱,Unicode字符集即便为打听决字符集这种不接受的问题而发生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、
nvarchar2的长度是在1到4000之间。和char、varchar2比拟起来,nchar、nvarchar2则最多存储4000个字符,不论是英文还是汉字;而char、varchar2最多能存储8000个英文,4000个汉字。能够看出利用nchar、nvarchar2数据种类时无须担心输入的字符是英文还是汉字,较为得体,但在存储英文时数量上有些磨损。
因而等闲来说,万一含有中文字符,用nchar/nvarchar2,万一纯英文和数字,用char/varchar2遏止其改换的行动注定会失利。不过个人能够批准措施肃清这些担心。