sql server中nvarchar和varchar的区别

首先,我们来看下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。

二、该如何选择两种字符呢?
       varchar
和nvarchar都能存储汉字。区别在于,一个汉字占varchar(2),只占nvarchar(1),而字母只占varchar(1),那么在数据
库字段求长度的时候,用varchar你就不一定知道它确切的知道它到底有几个字,如果用nvarchar,那么汉字也是nvarchar(1),字母也
是nvarchar(1),那么已经很明显了.
       同时,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来存储.

转载来自于:http://114267913.blog.163.com/blog/static/22807058201011045613922/

时间: 2024-10-16 13:44:08

sql server中nvarchar和varchar的区别的相关文章

SQL Server中char与varchar数据类型区别

在SQL Server中char类型的长度是不可变的,而varchar的长度是可变的 . 存入数据时: 如果数据类型为char时,当定义一个字段固定长度时,如果存进去数据长度小于char的长度,那么存入数据中数据所占的长度依然为定义字段长度,存入数据格式将变为存入数据加空格: 如果数据类型为varchar时,如果存进去数据长度小于varchar的长度,那么存入数据中数据所占的长度为存入数据长度. 取数据时: 如果数据类型为char时,取出数据需要用trim()去掉多余的空格: 如果数据类型为va

SQL Server中Text和varchar(max)数据类型区别

SQL Server中Text和varchar(max)数据类型区别 以前只知道text和image是可能被SQL Server淘汰的数据类型,但具体原因不太清楚,今天读书的时候发现了text与varchar(max)和nvarchar(max)的区别,主要是对操作符的限制,text只能被下列函数作用: 函数 语句 DATALENGTH READTEXT PATINDEX SET TEXTSIZE SUBSTRING UPDATETEXT TEXTPTR WRITETEXT TEXTVALID

SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别

原文:SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别 MSSQL为我们提供了两种动态执行SQL语句的命令,分别是 EXEC 和 SP_EXECUTESQL ,我们先来看一下两种方式的用法. 先建立一个表,并添加一些数据来进行演示: CREATE TABLE t_student( Id INT NOT NULL, Name NVARCHAR (10) NULL, Age TINYINT NULL, School NVARCHAR(20) NULL, Class NVAR

SQL Server 中CAST和Convert的区别

在 SQL Server 中Cast和Convert都是将表达式由一种数据类型转换为另一种数据类型.由于SQL Server提供两种功能,因此应该选择哪种功能或应该在哪种情况下使用该功能就很容易让人困惑了.CONVERT是专对SQL Server使用的,使日期与时间值,小数之间转换具有更宽的灵活性.CAST是两种功能中更具ANSI标准的功能,即虽然更具便携性(比如,使用CAST的函数能更容易的被其它数据库软件使用),但功能相对弱一些.不过,当小数转化为数值,并保留原始表达式中的小数数值时,仍然需

SQL Server中nvarchar(max)

SQL Server中,存储较小的数据,可以使用varchar(n).nvarchar(n) 和 varbinary(n)类型,存储大的数据,使用varchar(max).nvarchar(max)和varbinary(max) 代替 text.ntext 和 image 数据类型. 其中 varchar(max) 代替 text;nvarchar(max) 代替 ntext;varbinary(max) 代替 image NTEXT与NVARCHAR(MAX)的区别 NTEXT 默认情况下,N

SQL Server中char、varchar、text和nchar、nvarchar、ntext的区别 (转)

转:http://blog.csdn.net/jackychu/article/details/4183118 http://www.cnblogs.com/jhxk/articles/1633578.html 很多开发者进行数据库设计的时候往往并没有太多的考虑char, varchar类型,有的是根本就没注意,因为存储价格变得越来越便宜了,忘记了最开始的一些基本设计理论和原则,这点让我想到了现在的年轻人,大手一挥 一把人民币就从他手里溜走了,其实我想不管是做人也好,做开发也好,细节的把握直接决

SQL Server中SCAN 和SEEK的区别

★★★★★ ★★★★ ★★★ ★★ ★ APGC DSD Team APGC DSD Team Microsoft 12,587 Points                5                2                1 Recent Achievements Forums Answerer I                                            First Answer Confirmed                        

SQL Server中DateTime与DateTime2的区别

DateTime字段类型对应的时间格式是yyyy-MM-dd HH:mm:ss.fff,3个f,精确到1毫秒(ms),示例2014-12-0317:06:15.433. DateTime2字段类型对应的时间格式是yyyy-MM-dd HH:mm:ss.fffffff,7个f,精确到0.1微秒(μs),示例2014-12-0317:23:19.2880929. 如果用SQL的日期函数进行赋值,DateTime字段类型要用GETDATE(),DateTime2字段类型要用SYSDATETIME().

sql server中的varchar和Nvarchar有什么区别?

很多开发者进行数据库设计的时候往往并没有太多的考虑char, varchar类型,有的是根本就没注意,因为存储价格变得越来越便宜了,忘记了最开始的一些基本设计理论和原则,这点让我想到了现在的年轻人,大手一挥一把人民币就从他手里溜走了,其实我想不管是做人也好,做开发也好,细节的把握直接决定很多东西.当然还有一部分人是根本就没弄清楚他们的区别,也就随便选一个.在这里我想对他们做个简单的分析,当然如果有不对的地方希望大家指教. 1.CHAR.CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比