`

char、nchar、varchar、nvarchar的区别

阅读更多
一 、 nchar和nvarchar   

    nchar是固定长度Unicode数据的数据类型,nvarchar是可变长度Unicode数据的数据类型,二者均使用     UNICODE UCS-2 字符集。   

    nchar(n)   

    包含n个字符的固定长度Unicode字符数据。n  的值必须介于1与4,000之间。存储大小为n 字节的两倍。nchar在SQL-92 中的同义词为national  char 和national character。   

    nvarchar(n)   

    包含n 个字符的可变长度 Unicode 字符数据。n 的值必须介于1与4,000之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。nvarchar在SQL-92 中的同义词为 national char varying和national  character  varying。  

    注释   

    如果没有在数据定义或变量声明语句中指定 n,则默认长度为1。如果没有使用CAST函数指定n,则默认长度为30。  

    如果希望列中所有数据项的大小接近一致,则使用nchar。  

    如果希望列中数据项的大小差异很大,则使用nvarchar。  

    使用nchar或nvarchar的对象被赋予数据库的默认排序规则,除非使用COLLATE 子句赋予特定的排序规则。   

    SET  ANSI_PADDING OFF不适用于nchar 或nvarchar。SET  ANSI_PADDING  ON永远适用于nchar 和 nvarchar。   

   二、char 和 varchar   

    固定长度(char)或可变长度  (varchar) 字符数据类型。  

    char[(n)]   

    长度为 n 个字节的固定长度且Unicode的字符数据。n必须是一个介于1和 8,000之间的数值。存储大小为 n 个字节。char 在SQL-92中的同义词为character。  

    varchar[(n)]   

    长度为 n个字节的可变长度且非 Unicode  的字符数据。n必须是一个介于1 和8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。varchar在SQL-92中的同义词为char varying 或 character  varying。  

    注释   

    如果没有在数据定义或变量声明语句中指定n,则默认长度为1。如果没有使用 CAST函数指定n,则默认长度为 30。   

    将为使用char 或 varchar 的对象被指派数据库的默认排序规则,除非用COLLATE 子句另外指派了特定的排序规则。该排序规则控制用于存储字符数据的代码页。  

    支持多语言的站点应考虑使用Unicode nchar 或nvarchar数据类型以尽量减少字符转换问题。

    如果希望列中的数据值大小接近一致,请使用char。   

    如果希望列中的数据值大小显著不同,请使用varchar。     

    如果执行CREATE TABLE 或 ALTER  TABLE 时SET  ANSI_PADDING 为OFF,则一个定义为NULL的     char 列将被作为 varchar 处理。     

    当排序规则代码页使用双字节字符时,存储大小仍然为n个字节。根据字符串的不同,n个字节的存储大小可能小于n 个字符。   

总结:

   1、 varchar:   

              可变长度的非    Unicode   数据,最长为    8,000    个字符。   

   2、nvarchar:   

              可变长度    Unicode    数据,其最大长度为    4,000    字符。   

   3、char:

          固定长度的非 Unicode 字符数据,最大长度为 8,000 个字符。

   4、nchar

         固定长度的 Unicode 数据,最大长度为 4,000 个字符。

    5、char和varchar都是字符串类型的

        用Unicode编码的字符串,结果是字符的整数值.

 

具考证:在字符长度一定时CHAR的性能比VARCHAR好,而在长度不确定时,CHAR类型的字段在使用时性能略差。这个在sqlServer数据库下面能够体现,并且这个字段是经常使用的。


区别:
1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。由于char是以固定长度的,所以它的速度会比 varchar快得多!但程序处理起来要麻烦一点,要用trim之类的函数把两边的空格去掉!
2.CHAR的效率比VARCHAR的效率稍高。
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会更好一些。

一般地说,只要一个表有一个字段定义为varchar(n)类型,那么其余用char(n)定义的字段实际上也是varchar(n)类型。

如果你的长度本身不长,比如就3~10个字符,那么使用char(n)格式效率比较高,搜索速度快。但是如果有的数据很长,有的数据有比较短,比如注册用户的简介这样的字段,实在没有办法,而且很在乎浪费的空间,那么就用varchar(n)格式。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics