varchar[(n)] 和nvarchar(n) 及使用unicode的意义

原创 2006年05月21日 12:03:00

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。

 

 

对于英文来说,ascii码0-127就足以代码所有字符,对于中文而言,则必须使用两个字节(byte)来代表一个字符,具第一个字节必须大于127(所以我们有许程序判断中文都是以ascii码大于127作为条件)
以上用两个字节来表示一个中文的方式,在习惯上称为双字节(即DBCS:Double-ByteCharacterSet),而相对之下,英文的字符码就称为单字节SBCS(Single-ByteCharacterSet)。
虽然双字节(DBCS)足以解决中英文字符混合使用情况,但对于不同字符系统而言,必须经过字符码转换,非常麻烦。例如:中英文混合情况,日文,韩文等等。
为解决这个问题,Apple,Xerox,Microsoft,IBM,Novell,Borland...很多公司联合起来制订了一套可以适用于全世界所有国家的字符码,就称为Unicode
Unicode的特点是:
不管哪一国的字符码均以两个Byte表示,例如"A"在Unicode则是16进制41和00的组合,即4100,高位41(转换为Ascii码即是65=A),
WindowsNT/2000以Unicode来表示字符集,例如你可以看到MSSQLServer中产生的SQL文件可以选择是以Unicode来保存还是以普通格式来保存,如果你以Unicode保存,则在95/98平台许多软件均无法正确读出其格式。
同时你还可以注意到95/98中API定义,许多名称结尾是有一个A的,例如
WriteProfileStringA
而在NT/2000操作系统中,提供了两套API,另外一个命令是WriteProfileStringW,以W结尾的API只适用于NT/2000。(在NT中使用以W结尾的API函数效率比A结尾的要快,因为省去了Unicode和DBCS/SBCS的转换过程)

这样我们经常要用到的判断字符串长度的函数,在NT和95/98下执行结果不同,如下:(下面代码适合于VB,ASP)

95/98中:
len("abc中国")返回7(因为每个中文作为两个Ascii码来看)

nt/2000中:
len("abc中国")返回5(因为每个字符都作为一个Unicode来看)

明天将介绍如何在VB/NT环境下使len("abc中国")返回长度等于7

(PB不存在以上情况,除非你在NT下使用PB的Unicode版本,通常我们大家使用的均是PB的Windows32位版本)

漫谈varchar和Nvarchar区别

俩年多没面试了,今天第一次去面试.Net方面的软件工程师,对于C#那块有些明显感觉生疏了哈!数据结构、通讯协议等等,连基本七层模型、设计模型也不知道还能记起几个呢,这次面试问道在数据库存储中Varch...
  • pan869823184
  • pan869823184
  • 2014年02月16日 21:43
  • 3038

varchar(n),nvarchar(n) 长度、性能、及所占空间分析

 varchar(n),nvarchar(n) 中的n怎么解释:   nvarchar(n)最多能存n个字符,不区分中英文。   varchar(n)最多能存n个字节,一个中文是两个字节。 ...
  • net2005xd
  • net2005xd
  • 2014年09月13日 18:37
  • 2016

SQL中 NVARCHAR 和 VARCHAR 两者之间的优势与劣势

转自:http://blog.csdn.net/yenange/article/details/6240029 varchar在SQL Server中是采用单字节来存储数据的,nvarchar是使用...
  • Tomsheng321
  • Tomsheng321
  • 2015年08月19日 22:44
  • 584

数据库中varchar和Nvarchar区别与联系

在数据库中新建表的时候发现了字段类型有的带n有的不带n,那么两者之间有什么区别?         于是上网查找一些资料如下: 一、 1、CHAR。CHAR存储定长数据很方便,CHAR字段上的索引效率级...
  • xunzaosiyecao
  • xunzaosiyecao
  • 2015年05月13日 19:46
  • 1719

sqlserver数据库数据类型中varchar和nvarchar的区别

nvarchar   和   varchar   的区别是存储方式不同  varchar是按字节存储的。而带nvarchar是按字符存储的  比如说varchar(40),能存储40个字节长度的字符,...
  • konkong5501
  • konkong5501
  • 2013年10月16日 21:18
  • 1252

char/varchar/nvarchar的区别及其各自的使用场景

char char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值。当你输入的字符大于指定的数时,它会截取超出的字符。varchar(n...
  • w516162189
  • w516162189
  • 2017年12月27日 16:52
  • 78

浅谈mysql中varchar(m)与char(n)的区别与联系

对这varchar和char这两个数据类型最简单区分是:varchar存放变长字符串,char存放定长字符串。那么他们是否还有其他差别呢?本文将从浅显的层次以抛出问题解决问题的形式对两者的区分进一步了...
  • zhengwish
  • zhengwish
  • 2016年03月01日 17:44
  • 2622

关于varchar与nvarchar的“N”,特殊字符没法存储怎么办

如果你每次建数据表的时候固执的使用varchar,那么你可能会遇到以下的问题:   现在saleUserName的字段类型为varchar(50) update TableName set saleU...
  • hougelou
  • hougelou
  • 2017年04月24日 18:43
  • 326

varchar(n),nvarchar(n) 长度、性能、及所占空间分析

各种数据库表现不同: SQL Server: varchar(n),nvarchar(n) 中的n怎么解释:   nvarchar(n)最多能存n个字符,...
  • huangwenhua5000
  • huangwenhua5000
  • 2013年08月06日 16:05
  • 943

关于mysql中的int(N)、char(N)和varchar(N)类型的简单说明

在使用mysql时,int、char和varcahr这几种类型是比较常用的。在大学时有学过数据库,对于int(N)、char(N)和varchar(N)中的N一直了解的不是较透彻,前段时间在网上查了很...
  • ivnetware
  • ivnetware
  • 2016年05月22日 13:13
  • 1778
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:varchar[(n)] 和nvarchar(n) 及使用unicode的意义
举报原因:
原因补充:

(最多只允许输入30个字)