A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何圣东 黑马帝   /  2012-2-11 19:31  /  3233 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在MSSQLServer中,char,varchar,nvarchar具体有什么区别?
今天在看杨中科老师的MSSQLServer教程.

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

7 个回复

倒序浏览
char和nchar的区别,如果给10个字节存储空间,用char的话,如果你输入的字符串小于这10个存储空间那么省写的存储空间会用空格自动填充,而nchar不会,varcahr 和nvarchar的区别,varchar一般用于表示纯字符串,例如:abc ,123abc,123。。。而nvarchar一般用于那种含有中文字符需要表示的数据类型,只要是需要输入的字符串中含有中文,一般就用nvarchar数据类型

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
Jewel 黑马帝 2012-2-11 21:01:11
藤椅
简单你可以这么区分 nchar、nvarchar存储数据是都占有2个字节,不管是中文字符还是ASCII码字符
char、varchar存储数据ASCII码占用1个字节,但是存储中文字符占用2个。
其中的char、nchar跟varchar、nvarchar之间的区别就是占用的字节数带“var”的在存储数据的长度不固定,比如varchar(100),不要以为它占用100个字节,如果它里面存储的是‘abc’他就占用3个字节,char或nchar长度固定,你定义的多少就是多少,不管里面的数据有多长。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
char为定长,例如:char(10),当存储的数据没有达到10的时候,则用0占位,以达到10的长度。varchar和nvarcha则是不定长,即:不会像是char一样用0来占位,例如:varchar(50),当你存储的数据长度没有达到50的时候,你的数据本来多少位就是多少位,不会用0来占位补满。nvarchar同理,只是nvarcha相对于varchar来说是为了避免存储中文时显示不正常的情况。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
网摘,这个言简意赅
1、CHAR。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。
2、VARCHAR。存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。
3、TEXT。text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。
4、NCHAR、NVARCHAR、NTEXT。这三种从名字上看比前面三种多了个“N”。它表示存储的是Unicode数据类型的字符。我们知道字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较起来,nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。
所以一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
1)nvarchar(n):
包含   n   个字符的可变长度   Unicode   字符数据。n   的值必须介于   1   与   4,000   之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。
varchar[(n)]: 长度为   n   个字节的可变长度且非   Unicode   的字符数据。n   必须是一个介于   1   和   8,000   之间的数值。存储大小为输入数据的字节的实际长度,而不是   n   个字节。所输入的数据字符长度可以为零。

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

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
严鹏 黑马帝 2012-2-12 18:51:21
7#
1、 varchar:   
              可变长度的非    Unicode   数据,最长为    8,000    个字符。   
   2、nvarchar:   
              可变长度    Unicode    数据,其最大长度为    4,000    字符。   
   3、char:
          固定长度的非 Unicode 字符数据,最大长度为 8,000 个字符。

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


    5、     char和varchar都是字符串类型的
        用Unicode编码的字符串,结果是字符的整数值.

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
Char与varchar'nvarchar的区别是:是否占空。char在不满的时候占,而其余两个不占

Nvarchar与varchar 的区别是是否支持除英语之外的输入格式
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马