`
jakartom
  • 浏览: 43863 次
  • 性别: Icon_minigender_1
  • 来自: 洛阳
最近访客 更多访客>>
社区版块
存档分类
最新评论

SQL Server中,varchar和nvarchar如何选择

 
阅读更多

SQL Server中,varchar和nvarchar如何选择

varchar和nvarchar的区别:

varchar(n)
长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节(如varchar(6),当字段为qqq时,数据库实际占用空间为3个字节,而不是6个字节,但只允许存储6个字节,一般中文占两个字节)。

nvarchar(n)
包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。

两字段分别有字段值:我和coffee
那么varchar字段占2×2+6=10个字节的存储空间,而nvarchar字段占8×2=16个字节的存储空间。


如字段值只是英文可选择varchar,而字段值存在较多的双字节(中文、韩文等)字符时用nvarchar
SQL Server中,varchar和nvarchar如何选择?

varchar在SQL Server中是采用单字节来存储数据的,nvarchar是使用Unico来存储数据的.中文字符存储到SQL Server中会保存为两个字节(一般采用Unico编码),英文字符保存到数据库中,如果字段的类型为varchar,则只会占用一个字节,而如果字段的类型为nvarchar,则会占用两个字节.

  正常情况下,我们使用varchar也可以存储中文字符,但是如果遇到操作系统是英文操作系统并且对中文字体的支持不全面时, 在SQL Server存储中文字符为varchar就会出现乱码(显示为??).而且正常情况下,主机都会支持中文的环境,所以如果使用varchar来存储数据,在开发阶段是发现不了的.多数情况下,在布署的时候也不会有问题.

  但是!如果布署的主机是英文操作系统,并且不支持中文环境,那问题就出来了.所有的varchar字段在存储中文的时候都会变成乱码(显示为??).而且一般情况下你不会知道这是因为你采用了错误的数据类型来存储所造成的,你会试着去装中文字体,试着去设置操作系统的语言环境...这些都不能解决问题,唯一能解决问题的是把数据库字段的类型个性为nvarchar(或者nchar).对项目管理比较熟悉的朋友应该都知道,到布署阶段再来修改数据库是一个很恐怖的事情.

  使用nvarchar的另一个非常好处就是在判断字符串的时候可以不需要考虑中英文两种字符的差别.

  当然,使用nvarchar存储英文字符会增大一倍的存储空间.但是在存储代价已经很低廉的情况下,优先考虑兼容性会给你带来更多好处的.

  所以在Design的时候应该尽量使用nvarchar来存储数据.只有在你确保该字段不会保存中文的时候,才采用varchar来存储.

 

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
分享到:
评论

相关推荐

    Sqlserver中char,nchar,varchar与Nvarchar的区别分析

    Sqlserver中char,nchar,varchar与Nvarchar的区别分析,使用sqlserver的朋友可以参考下。

    SQLServer中char、varchar、nchar、nvarchar的区别

    SQLServer中char、varchar、nchar、nvarchar的区别 SQLServer中char、varchar、nchar、nvarchar的区别.txt

    SQL Server中,varchar和nvarchar如何选择?

    varchar在SQL Server中是采用单字节来存储数据的,nvarchar是使用Unico来存储数据的.中文字符存储到SQL Server中会保存为两个字节(一般采用Unico编码),英文字符保存到数据库中,如果字段的类型为varchar,则只会...

    基于SQL Server中char,nchar,varchar,nvarchar的使用区别

    对于程序中的一般字符串类型的字段,SQL Server中有char、varchar、nchar、nvarchar四种类型来对应,那么这四种类型有什么区别呢,这里做一下对比。 1.定长或变长 所谓定长就是长度固定,当要保存的数据长度不够时将...

    解决繁体-批量转化varchar为nvarchar

    因最近自己制作的软件需运行在简繁系统中,但数据库设计时...此脚本可批量处理数据库内所有char和varchar转换为nchar和nvarchar,已集成重建主键,约束,索引,此脚本没有启用事务,运行前请备份原数据库或手动增加事务

    sql中varchar和nvarchar的区别与使用方法

    问: sql server中的varchar和Nvarchar有什么区别啊,varchar好像是一个英文和一个汉字都站两个字节,而Nvarchar则是一个英文占一个字节,汉字占两个字节。可是这个对asp程序有什么影响? 答: varchar(n) 长度为 ...

    SQL中varchar和nvarchar的基本介绍及其区别

    varchar(n) 长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。...如字段值只是英文可选择varchar,而字段值存在较多的双字节(中文、韩文等)字符时用nva

    sqlserver中将varchar类型转换为int型再进行排序的方法

    如果我们数据库的ID设置为varchar型的 在查询的时候... 适用于SQLServer Oracle 二、 代码如下: select * from yourtable order by convert(int,yourcol); 仅适用于SQLServer 作者 itmyhome 您可能感兴趣的文章:SQL S

    完美解决SQL server2005中插入汉字变成问号的问题

    关于SQL server2005中插入汉字变成问号的解决办法 1.右击你所建的数据库,点击“属性”,选择“选项”并点击。将其中的排序规则设置为:Chinese_PRC_CI_AS(选择下拉列表框即可设置),然后“确定“。2.在表中将你的...

    SQL Server数据类型char、nchar、varchar、nvarchar的区别浅析

    主要介绍了SQL Server数据类型char、nchar、varchar、nvarchar的区别浅析,本文写的比较容易明白,需要的朋友可以参考下

    sqlserver字段类型介绍

    sqlserver字段类型介绍 数据库中,英文字符只需要一个字节存储就足够了,但汉字和其他众多非英文字符,则...在sqlserver中编写sql语句,nchar、nvarchar都要在字符前面加N,避免出现乱码!!(例如:SET @k=N'abcdefg')

    使用PreparedStatement的setString方法会自动在varchar后面补空格

    此实例意在解决预处理命令PreparedStatement的setString()方法,在sql2008数据库中写入数据时,会自动补足空格的问题, 同时此实例也解决了当存在自动补足空格的问题时,使用nvarchar可以使查找出来的数据与原输入...

    SQL数据类型和范围(SQLServer,MySql,Access)

    Microsoft Access、MySQL 以及 SQL Server 所使用的数据类型和范围。 SQL Server 数据类型 Character 字符串 数据类型 描述 存储 char(n) 固定长度的字符串。最多 8,000 个字符。 n varchar(n) 可变长度的...

    SQL SERVER 2000开发与管理应用实例

    本书不但融合了作者在使用SQL Server 2000过程中遇到的各种常见问题和应用案例,还总结了作者几年来在CSDN 社区SQL Server版所解决的大量问题,面向实际项目需求,涉及不同类型的应用,能够多角度地引导读者学习相关...

    sql server 语句大全

    declare @list varchar(1000),@sql nvarchar(1000) select @list=@list+','+b.name from sysobjects a,syscolumns b where a.id=b.id and a.name='表A' set @sql='select '+right(@list,len(@list)-1)+' from 表A' ...

    数据库编程期末答疑,卷子讲解,SQL server相关操作讲解,如有侵权请联系删除

    如下是一个简化的员工考勤应用E-R图,请在SQL Server中创建名为YQKG的数据库,包括两个数据文件,一个日志文件,文件名按SQL Server对象命名规范定义,数据文件按10%的比例增长,数据库定义完成后输入如下样本数据。...

Global site tag (gtag.js) - Google Analytics