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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨曾荣 中级黑马   /  2012-3-16 20:45  /  2464 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

char(n)不足长度的n的用空格填充,这个容易理解,要是用于判断而不考虑精确度的话最好使用varchar
而可能含有中文的用Nvarchar,这个什么去理解,
varchar与Nvarchar的区别在哪里?

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

7 个回复

倒序浏览
很好理解,有些时候  varchar存中文可能出现乱码。nvarchar就不会。

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
varchar在SQL Server中是采用单字节来存储数据的,nvarchar是使用Unico来存储数据的.中文字符存储到SQL Server中会保存为两个字节(一般采用Unico编码),英文字符保存到数据库中,如果字段的类型为varchar,则只会占用一个字节,而如果字段的类型为nvarchar,则会占用两个字节.
  正常情况下,我们使用varchar也可以存储中文字符,但是如果遇到操作系统是英文操作系统并且对中文字体的支持不全面时, 在SQL Server存储中文字符为varchar就会出现乱码(显示为??).而且正常情况下,主机都会支持中文的环境,所以如果使用varchar来存储数据,在开发阶段是发现不了的.多数情况下,在布署的时候也不会有问题.
  但是!如果布署的主机是英文操作系统,并且不支持中文环境,那问题就出来了.所有的varchar字段在存储中文的时候都会变成乱码(显示为??).而且一般情况下你不会知道这是因为你采用了错误的数据类型来存储所造成的,你会试着去装中文字体,试着去设置操作系统的语言环境...这些都不能解决问题,唯一能解决问题的是把数据库字段的类型个性为nvarchar(或者nchar).对项目管理比较熟悉的朋友应该都知道,到布署阶段再来修改数据库是一个很恐怖的事情.
  使用nvarchar的另一个非常好处就是在判断字符串的时候可以不需要考虑中英文两种字符的差别.
  当然,使用nvarchar存储英文字符会增大一倍的存储空间.但是在存储代价已经很低廉的情况下,优先考虑兼容性会给你带来更多好处的.
  所以在Design的时候应该尽量使用nvarchar来存储数据.只有在你确保该字段不会保存中文的时候,才采用varchar来存储

评分

参与人数 1技术分 +2 收起 理由
郑文 + 2

查看全部评分

回复 使用道具 举报
char      定长
varchar   变长,ASCII字符只占1个字节
nvarchar  变长Unicode,字符都占2个字节

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
1.char  适用于长度固定,一般不含中文的情况。char区分中英文,英文占1个字节,中文占2个字节。
(比如:char(20)你只能插入20个字母或者10个汉字。即使你插入abc,不足20个字节,数据库也会在abc后自动插入17个空格补足20个字节)

2.varchar 适用于长度不固定,一般不含中文的情况。varchar区分中英文,英文占1个字节,中文占2个字节。varchar(20) abc只占3个字节,varchar效率低于char。

3.nvarchar 适用于长度不固定,含有中文的情况。nvarchar不区分中英文,nvarchar(20)你可以存入20个字母/汉字或者中英文组合  20是字符数,而不是字节。

评分

参与人数 1技术分 +2 收起 理由
郑文 + 2

查看全部评分

回复 使用道具 举报
韩迎龙 发表于 2012-3-16 20:56
varchar在SQL Server中是采用单字节来存储数据的,nvarchar是使用Unico来存储数据的.中文字符存储到SQL Se ...

一直都以为varchar是存储中文的,nvarchar 都没用过,改进改进
回复 使用道具 举报
oscar 中级黑马 2012-3-20 12:34:48
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编码的字符串,结果是字符的整数值.

另外,在SQL Server数据库中如果有中文插入表中要在中文前面添加“N”,如 insert into Table(你想把数据插入的表)(Name,Age)values(N'刘德华',50)

评分

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

查看全部评分

回复 使用道具 举报
楼上的说的都非常详细  学习了!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马