有时候设计字段的时候,碰到nvarchar和varchar时候,是有点犹豫。所以今天就来探个究竟把。

(一)  varchar是非Unicode可变长度类型,nvarchar是Unicode编码可变长度类型

DECLARE @name AS VARCHAR(50)='我是中国人test'
SELECT @name AS Name,
DATALENGTH(@name) AS [Length]

DECLARE @nname AS NVARCHAR(50)='我是中国人test'
SELECT @nname AS Name,
DATALENGTH(@nname) AS [Length]

(二)它们两者的最大长度不一样

nvarchar的最大值是4000

varchar最大值是8000

(三) varchar能存储的字节数就是它的长度,nvarchar能存储的字节数是它的长度乘2

CREATE TABLE Test
(
vStr varchar(10),
nStr nvarchar(10)
) --对于数字
INSERT INTO [dbo].[Test] VALUES('','') --对于字母
INSERT INTO [dbo].[Test] VALUES('abcdefghik','abcdefghik') --对于汉字
INSERT INTO [dbo].[Test] VALUES('我是中国人','我是中国人我爱我祖国') --对于汉字和字母
INSERT INTO [dbo].[Test] VALUES('我是中国zz','我是中国人zhang')

(四) 实际开发中,如何选择,到底是用哪个好呢?

总的来说,我是比较推崇使用nvarchar

有人说,varchar比nvarchar更省空间,应该更多的用varchar。但是我不是很赞同这个观点,首先,现在空间相对来说已经不是那么缺少了,没有必要太纠结于空间这个了,还有一点就是现在的操作系统基本上内部解析基本上都是用Unicode编码的,使用了nvarchar你可以避免每次从数据库读取或写入时候,进行编码转换,转换需要时间,并且很容易出错。如果出错,恢复回来可没那么简单,并且nvarchar是支持多种语言的。所以我大部分时间做数据库设计的时候都是用nvarchar的。

(五)题外话

各位园友,有啥看法的,能否告知一下,谢谢

nvarchar 和varchar区别的更多相关文章

  1. char、nvarchar和varchar区别

    这3种字符串数据类型是我们使用最多的,我们在数据库设计时到底该怎么使用了?首先我们先来分析3个数据类型的说明: 1.char CHAR的长度是固定的,最长2000个字符. 2.varchar 和 va ...

  2. NVARCHAR 和VARCHAR区别和使用

    1.各自的定义: ► nvarchar(n) : 包含   n   个字符的可变长度   Unicode   字符数据.n   的值必须介于   1   与   4,000   之间.字节的存储大小是 ...

  3. 英文操作系统中中文乱码(SQL中 NVARCHAR 和 VARCHAR区别)

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

  4. 答:SQLServer DBA 三十问之一: char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储 过程和使用T-SQL查询数据有啥不一样;

    http://www.cnblogs.com/fygh/archive/2011/10/18/2216166.html 1. char.varchar.nvarchar之间的区别(包括用途和空间占用) ...

  5. SQL 2005中char、nchar、varchar、ntext and nvarchar(max)的区别

    原文地址 MS SQL大值数据类型varchar(max).nvarchar(max).varbinary(max) 在MS SQL2005及以上的版本中,加入大值数据类型(varchar(max). ...

  6. 怎么区分MSSQL中nvarchar和varchar的区别?

    怎么区分MSSQL中nvarchar和varchar的区别呢?下面两段代码可以帮你看到他们的区别. declare @s Nvarchar(10) set @s='那么相当于abcd可以存储多少个汉字 ...

  7. 数据库字段类型中char和Varchar区别

    char和varchar区别 char类型:对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节,char存储定长数据很方便,char字段上的索引效率级高,比如定义char(10),那么不论你 ...

  8. SQL NVARCHAR和VARCHAR限制

    1:NVARCHAR(max)可以存储(有时甚至更多)2GB的数据(10亿个双字节字符). 2:NVARCHAR和VARCHAR连接时的截断取决于数据类型 varchar(n) + varchar(n ...

  9. mysql基础之三:char与varchar区别,varchar(M)能存多少

    char与varchar区别 char (13)长度固定, 如'1234567890' 存储需要空间 10个字符; varchar(13) 可变长 如'1234567890' 需要存储空间 11字符; ...

随机推荐

  1. redis3.05安装

    #yum -y install gcc #cd /usr/local/src #tar -zxvf redis-3.0.5.tar.gz #cd redis-3.05/ #make PREFIX=/u ...

  2. JS 基本数据类型和引用数据类型

    本文章已收录于:   .embody { padding: 10px 10px 10px; margin: 0 -20px; border-bottom: solid 1px #ededed } .e ...

  3. JAVA内存模型与线程

    概述 由于计算机的运算速度和它的存储和通讯子系统的速度差距巨大,大部分时间都花在IO,网络和数据库上.为了压榨CPU的运算能力,需要并发.另外,优秀的并发程序对于提高服务器的TPS有重要的意义. 硬件 ...

  4. Java线程安全性中的对象发布和逸出

    发布(Publish)和逸出(Escape)这两个概念倒是第一次听说,不过它在实际当中却十分常见,这和Java并发编程的线程安全性就很大的关系. 什么是发布?简单来说就是提供一个对象的引用给作用域之外 ...

  5. Java Class Loader

    Reference: [1] http://www.cnblogs.com/kevin2chen/p/6714214.html 当调用 java命令运行一个java程序时,会启动一个java虚拟机进程 ...

  6. Servlet起步

    什么是Servlet Servlet是sun公司制定的用来扩展web服务器功能的组件规范,通俗理解为遵循Servlet规范开发的实现了某个功能的Java组件.该组件没有 main 方法,不能独立地运行 ...

  7. XSS研究1-来自外部的XSS攻击

    引入: 上文中我们的例子是研究了来自内部的XSS攻击,通过输送一段有害js代码到受害者的机器,让其在受害者的域上运行这段有害JS代码来得到入侵目的.现在我们来看下来自外部的XSS攻击. 实践: 下面还 ...

  8. 基于Express+Socket.io+MongoDB的即时聊天系统的设计与实现

    记得从高中上课时经常偷偷的和同学们使用qq进行聊天,那时候经常需要进行下载qq,但是当时又没有那么多的流量进行下载,这就是一个很尴尬的事情了,当时就多想要有一个可以进行线上聊天的网站呀,不用每次痛苦的 ...

  9. shiro不重启动态加载权限

    最近一朋友让我帮他做一个后台权限管理的项目.我就在我原来的项目加加改改但是还是不理想,查了不少资料也走了不了弯路...... shiro基本的配置我就不多说了这个很简单自己查查资料就完成----下面是 ...

  10. java mvc框架系列总结ssh,ssm,servlet

    2016年10月3日 10:36:40 一直以来都很想写属于自己的博客,一来可以分享自己的学习经验,二来可以及时总结,毕竟博客是写给所有人看的,需要更加仔细的注意每个细节,而不是仅仅让自己看懂. 学了 ...