sql server中nvarchar和varchar char

1 首先,我们来看下nvarchar和varchar的官方帮助里的说明:

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

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

2.
N表示Unicode常量,可以解决多语言字符集之间的转换问题,见联机帮助

姓名,和房间通常都是用varchar这个seout="kwL(event, this);" onmouseover="kwE(event,0, this);" style="color: #6600ff; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" target="_blank">数据 类型  
   
  解释一下:  
  drop   proc   a  
   
  varchar(n):变长型字符数据类型,存储最长长度为8,000   个字符。  
   
  举个例子:  
  create   table   a   (name1   varchar(8))  
  insert   a   select   '张红a'      
          ---   存储长度为5个字节,余下的3个字节全部释放  
  insert   a   select   '王一南'  
          ----存储长度为6个字节,余下的2个字节全部释放  
  ---意思是varchar变长字符数据类型与存储数据的实际长度是一致的  
   
  nvarchar(n):可变长度   Unicode   数据,其最大长度为   4,000   字符。  
    字节的存储大小是所输入字符个数的两倍,  
  就是说它是双字节来存储数据的。  
  如果存储数据如果存在单字节时,它也是以双字节来占用存储空间 的。  
   
  举个例子:  
  create   table   aa   (name1   nvarchar(8))  
  insert   aa   select   '张红a'      
          ---   存储 长度为6个字节,余下的2个字节全部释放  

3

varchar比char节省空间,在效率上比char会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’。
  varchar虽然比char节省空间,但是如果一个varchar列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用char代替varchar会更好一些。

当然还有一种情况就是象身份证这种长度几乎不变的字段可以考虑使用char,以获得更高的效率。

  nvarchar 和 varchar 的区别是存储方式不同 
  varchar是按字节存储的.而带"n"的nvarchar是按字符存储的 
  比如说 varchar(40),能存储40个字节长度的字符,存储中文字符的时候,因为中文字符1个字符就等于2个字节.所以varchar(40)只能存储20个中文字符. 
  nvarchar(40),就可以存储40个中文字符,也就是说可以存储80个字节长度的字符.nvarchar要相对于存储的字符类型.比如有些字符是占3个字节的. 
同样的,char和nchar也一样道理。
  char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值。当你输入的字符大于指定的数时,它会截取超出的字符。
  varchar是变长型,它的存储空间会跟你输入的实际字符数而改变,但最大长度不能超过你指定的长度。
  nvarchar是unicode的变长型,它和char的区别很明显了,它和varchar的区别主要是存储空间大,相同长度下能容内更多的字符。

二、该如何选择两种字符呢?

       varchar和nvarchar都能存储汉字。区别在于,一个汉字占varchar(2),只占nvarchar(1),而字母只占varchar(1),那么在数据库字段求长度的时候,用varchar你就不一定知道它确切的知道它到底有几个字,如果用nvarchar,那么汉字也是nvarchar(1),字母也是nvarchar(1),那么已经很明显了.

       同时,varchar的检索快于nvarchar。

     至于,具体该选择哪种,看你自己的想法和需求了

 

 

 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2025年1月    »
12345
6789101112
13141516171819
20212223242526
2728293031
搜索
标签列表
网站分类
最新留言
    文章归档
    友情链接

    Powered By Z-BlogPHP 1.7.3

    Copyright Your WebSite.Some Rights Reserved.闽ICP备11018667号-2