您的位置:首页 > 其它

nchar,char,varchar 与nvarchar区别

2012-10-30 17:51 330 查看
char类型: 对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节,CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义 char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。因为是固定长度,所以速度效率高。
Varchar类型:Varchar 的类型不以空格填满,比如varchar(100),但它的值只是"qian",则它的值就是"qian"

而char 不一样,比如char(100),它的值是"qian",而实际上它在数据库中是"qian "(qian后共有96个空格,就是把它填满为100个字节)。

由于char是以固定长度的,所以它的速度会比varchar快得多!但程序处理起来要麻烦一点,要用trim之类的函数把两边的空格去掉!

VARCHAR存储变长数据,但存储效率没有CHAR高。如 果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。

Nchar类型和Nvarchar类型是怎么一回事呢?为了与其他多种字符的转换,如中文,音标等,对每个英文(ASCII)字符都占用2个字节,对一个 汉字也占用两个字节,所有的字符都占用2个字节。

例如

varchar(n):变长型字符数据类型,存储最长长度为8,000 个字符。

举个例子:

insert a select '木子a'

--- 存储长度为5个字节,余下的3个字节全部释放

insert a select '木神易

----存储长度为6个字节,余下的2个字节全部释放

---意思是varchar变长字符数据类型与存储数据的实际长度是一致的

nvarchar(n):可变长度 Unicode 数据,其最大长度为 4,000 字符。

字节的存储大小是所输入字符个数的两倍,

就是说它是双字节来存储数据的。

如果存储数据如果存在单字节时,它也是以双字节来占用存储空间的。

varchar一般适用于英文和数字,Nvarchar适用中文和其他字符,其中N表示Unicode常量,可以解决多语言字符集之间的转换问题

-------------------------

-------------------------

在某些情况下,char比varchar会快一些;某些情况varchar比char快(这种情况可能更多)。事实上,char比varchar快得多的情况几乎没有(除非是极端情况,如错误地使用varchar(1))。

初看起来,由于char是固定长度,它在数据行(row)中的位置(或偏移量)是固定的。因此char字段的获取几乎是直接跳到该位置然后开始读取。而varchar由于长度不固定,varchar字段的获取还需要通过一个间接跳转(类似于lookup table)。但实际上,由于该操作是在内存中进行,除了多几条CPU指令之外,几乎谈不上什么开销。

而通常一个数据页存储的记录数多少更能影响数据库的性能,因为它牵涉到磁盘I/O。假设字段长度为100,而平均字符串数据长度只有50,那么varchar(100)要比char(100)更快。极端情况,如果该表的字段很少,那么varchar会比char快很多。因为同样大小的磁盘读取,采用varchar读取的记录数会接近char的两倍。

对于更新(update)操作的性能,则要取决于填充率(fill factor)和更新的频度。

对于varchar和char的选择,一般性的指导原则是,对于最大长度<=4的字符串,使用char(nchar); 对于最大长度大于20的字符串,使用varchar(nvarchar)。对于4~20之间的字符串,可以根据自己情况定。对于大多数情形,使用varchar会更好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: