加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 13:00:56 所属栏目:MsSql教程 来源:网络整理
导读:1.?char类型:? 对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节,CHAR存?储定长数据很方便, CHAR字段上的索引效率极高, 比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空?间 。因为是固定长度,所以速度效率高。

1.?char类型:?

对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节,CHAR存?储定长数据很方便,CHAR字段上的索引效率极高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空?间。因为是固定长度,所以速度效率高。比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。因为是固定长?度,所以速度效率高。?

2.?VARCHAR存储变长数据

如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为?VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。?
 ? ?Varchar类型:Varchar?的类型不以空格填满,而Char则会填充满为止,如varchar(100),但它的值只是"qian",所以它在数据库中存的值就是"qian",而?char?不一样,如char(100),它的  值是"qian",而实际上它在数据库中是"qian?"(qian后共有96个空格,就是把它填满为100个字节)。?
注:由于char是以固定长度的,所以它的速度会比varchar快得多!但程序处理起来要麻烦一点,要用ltrim(或者rtrim)之类的函数把两边的空格去掉!?
3.?Nchar类型和Nvarchar类型是怎么一回事呢?

为了与其他多种字符的转换,如中文,音标等,对每个英文(ASCII)字符都占用2个字节,对一个汉字也占用两个字节,所有的字符都占用2个字节。?

  varchar(n):变长型字符数据类型,存储最长长度为8,000?个字符?
  nvarchar(n):可变长度?Unicode?数据,其最大长度为?4,000?字符.字节的存储大小是所输入字符个数的两倍,就是说它是双字节来存储数据的。如果存储数据如果存在单字节时,它也是以双字节来占用存储空间的。?

  varchar一般适用于英文和数字,Nvarchar适用中文和其他字符,其中N表示Unicode常量,可以解决多语言字符集之间的转换问题。?

以下是补充:

对于程序中的一般字符串类型的字段,SQL?Server中有char、varchar、nchar、nvarchar四种类型来对应,那么这四种类型有什么区别呢,这里做一下对比。

1.定长或变长

所谓定长就是长度固定,当要保存的数据长度不够时将自动在其后面填充英文空格,使长度达到相应的长度;有var前缀的,表示是实际存储空间是动态变化的,比如varchar,nvarchar变长字符数据则不会以空格填充。

2.Unicode或非Unicode

数据库中,英文字符只需要一个字节存储就足够了,但汉字和其他众多非英文字符,则需要两个字节存储。如果英文与汉字同时存在,由于占用空间数不同,?容易造成混乱,导致读取出来的字符串是乱码。Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字?符也是用两个字节表示。而前缀n就表示Unicode字符,比如nchar,nvarchar,这两种类型使用了Unicode字符集。

3.几种数据类型的存储的最大容量

char,varchar?最多8000个英文,4000个汉字

nchar,nvarchar??最多可存储4000个字符,无论英文还是汉字

?==========================================================================================================================

1)?????? 定义:

char:??? 固定长度,存储ANSI字符,不足的补英文半角空格。

nchar:?? 固定长度,存储Unicode字符,不足的补英文半角空格

varchar:? 可变长度,存储ANSI字符,根据数据长度自动变化。

nvarchar: 可变长度,存储Unicode字符,根据数据长度自动变化。

?

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

? varchar[(n)]:长度为 n 个字节的可变长度且非 Unicode的字符数据。n 必须是一个介于?? 1 和 8,000之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。

注意: ?????ANSI主要是以单字节来存储数据,一般适合英文。而我们常用的汉字需要用两个字节来存储,所以就要使用unicode的数据类型,不然读取出来的数据可能会乱码。

(2)区别:

????? ①从存储方式上,nvarchar是按字符存储的,而 varchar是按字节存储的;

????? ②从存储量上考虑, varchar比较节省空间,因为存储大小为字节的实际长度,而 nvarchar是双字节存储;

????? ③在使用上,如果存储内容都是英文字符而没有汉字等其他语言符号,建议使用varchar;含有汉字的使用nvarchar,因为nvarchar是使用Unicode编码,即统一的字符编码标准,会减少乱码的出现几率;

④?? 如果你做的项目可能涉及不同语言之间的转换,建议用nvarchar。

(3)优缺点:

?? Nvarchar优点:判断字符串的时候可以不需要考虑中英文两种字符的差别,可以避免程序中乱码的问题。

?????????? 缺点:存储英文字符会增大一倍的存储空间.但是在存储代价已经很低廉的情况下,优先考虑兼容性会给你带来更多好处的,效率没有varchar高。

(4)为什么要用nvarchar?

??? 有n前缀的,n表示Unicode字符,即所有字符都占两个字节,nchar,nvarchar

字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。

(5)有关var的简单介绍:

有var前缀的,表示是实际存储空间是变长的,varchar,255)">所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;而变长字符数据则不会以空格填充,比较例外的是,text存储的也是可变长。

(6)如何使用这些类型?

如果你肯定存储的数据长度,而且不包中文的,可以选择char类型。

如果肯定存储的数据长度,但可能包括中文,可以选择nchar类型。

如果不确定存储的数据长度,存储只有英文、数字的最好用varchar

如果不确定存储的数据长度,也有可能有中文,可以选择nvarchar类型,在SQL Server2005中也是比较常用的字符数据类型。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读