SqlServer中char及Varchar,nVarChar和Oracle中varchar2区别及其联系

SqlServer中char及Varchar,nVarChar和Oracle中varchar2区别及其联系,第1张

概述        数据库中数据类型字符串用到的最多,而我们在选择数据类型的时候,往往会碰到到底选项哪种字符串比较合适,而这些问题,我碰到的次数蛮多,也一直纠结与此,不断的在忘记和复习之间”奔波”,今天特意写下来。 本文主要内容有: 1,  SqlServer中char,varchar,text及其对应的nchar,nvhar,ntext的区别和联系。 2,  Orachar中char,varchar

        数据库中数据类型字符串用到的最多,而我们在选择数据类型的时候,往往会碰到到底选项哪种字符串比较合适,而这些问题,我碰到的次数蛮多,也一直纠结与此,不断的在忘记和复习之间奔波”,今天特意写下来。

本文主要内容有:

1,  sqlServerchar,varchar,text及其对应的nchar,nvhar,ntext的区别和联系。

2,  Oracharchar,varchar2及其对应的nchar,nvarchar2的区别和联系。

3,  存储字符串,sqlServerOracle相互联系。

 

       首先我们得大致了解字符集Unicode是什么?

       我们都知道,计算机只能存储01这样的位数(1Bit,最小存储单元),而1byte(一个字节)=8Bit,通过排列组合,我们知道会有2*2*2*2*2*2*2*2=256种可能,每一种排列可能代表一个英文字符或者其他标识,对于英文字符来说256种可能代表其符号还有多的,这是美国开始制定第一个字符集ASCII但是到中国来256种,存储汉字是远远不够的,因此就用2个字节来存储,这样就有256*256=65536种可能来代表不同的汉字,对于汉字来说,够啦!这个就是中国的字符集GBK,为呢满足国际化,美国又弄出呢UniCode字符集的。UniCode字符集用2个字节(256*256=65536种可能)来存储东西。这样就能满足绝大部分不同国家,不同的文字标识。这样,你用Unicode字符集在中国书写希腊的文字,放到希腊的计算机中,就自然解析为希腊文字,就不会出现解析不同而乱码。

        其次,数据库存储字符,一般有2种形式,不可变和可变,其指的是最终存储的值占据的空间大小。

        什么叫不可变,演唱会,我给你预留10个空座,不管你来不来,这个空座都是给你留的。

        什么叫可变,演唱会,我最多给你预留10个空座,你来几个人,用几个空座,如果有多余的,我回收掉。

        这里,

          Char就是不可变(定长)

          Varchar就是可变(变长)

        那么

          Nchar,nvarchar呢,演唱会,我知道过来的10个人中有胖子,胖子一个人要做2个空座,但是我不知道你来多少个胖子,所以我给你预留20个空座,这样就不会出现胖子多啦,不够做的情况。

(可能有人说,浪费,我告诉你,现在存储便宜,相对于因为解析而出现乱码来说,值!)

        从这就能看出,在这里以n开头的数据类型比如nchar,nvarchar,就是使用UniCode(一个字符占2个字节)来进行编码和解码的。

        我给你提供椅子,有数量限制的,对于charvarcharncharnvarchar来说,都是最多8000张椅子,但前者能坐8000人,后者只能坐4000人。

       有N和没N的区别,就是在不没N的话,分情况(汉字占2个字节,字母和数字占一个字节)对待,有N的话,统一对待(不管来的是谁,都占据2个字节)

         那textntext呢?

         都是提供大批量的椅子给你们,都是可变的,但对于text来说,一个人一张椅子,对呢ntext来说,一个人2张椅子。

 

          总结来说:

Char(n)

定长

N1-8000

varchar(n)

变长

N1-8000

Nchar(n)

定长

N1-4000

Nvarchar(n)

变长

N1-4000

Text

变长

 

Ntext

变长

 

 

          就效率而言的话,char在索引最快,varchar次之。

 

          在Oracle,Char,varchar2nvarchar2,nchar就比较特殊!

          VARCHAR2Oracle提供的特定数据类型,Oracle保证VARCHAR2在任何版本中该数据类型都可以向上和向下兼容。

           VarcharOracle中不建议使用。

其中,

2结尾的类型是变长,以实际长度存储。

N开头的类型是每个字符固定2个长度(字节)

区分它们最好从使用角度来区分。

Char     定长   1-2000字节

Nchar    定长   1-2000字符或者字节。长度随字符集而定。最多可以存2000个汉字或者2000个字母。有人说2000个汉字不就等于4000个字节,不是超过所规定的2000个字节吗?是,2000个汉字是等于4000个字节,但他允许这么存,比如我存500汉字加上1000个字母,最后的长度等于

                500+1000*2=3000个字节。

比如:

createtable ABC(

namesnchar(5)notnull

)

insertinto ABC(names)values('中国人民国');

insertinto ABC(names)values('abcde');

insertinto ABC(names)values('中国人民国中');--插入值大于5

insertinto ABC(names)values('中国人ad');

insertinto ABC(names)values('中国人adc');--插入值大于5

insertinto ABC(names)values('abcdef');   --插入值大于5

           结果:

          

Varchar2  变长 1-4000个字符(主意是字符不是字节)。说明可以存4000个汉字或者8000个字母

Nvarchar2变长 1-4000个字符或者字节。跟上面Nchar解释是一样的。比如nvarchar2(10),你可以存10个汉字或者10个字母,或者存10个英文字母和汉字或者中英文的组合,这个10定义的是字符数不是字节数。

 

            就效率而言的话,varchar2char省空间,但效率比char低,要想获得效率,则必须牺牲空间,这个就是数据库常说的用空间换效率

 

            这几个在存储上面的一些联系:

           一般来说,如果含有中文的话,用把2个字节当一个字符进行存储要好,这样就会避免乱码,

         (关于什么是编码,编码的由来和如何产生乱码的由来,下篇文章进行记录)

          所以,在sqlserver中,含有中文的,一般使用nchar或者nvarchar,纯英文或者数字,用char/varchar.

     Oracle中,含有中文的,使用nchar或者nvarchar2存储比较方便,纯英文或者数字,用char/varchar2.

总结

以上是内存溢出为你收集整理的SqlServer中char及Varchar,nVarChar和Oracle中varchar2区别及其联系全部内容,希望文章能够帮你解决SqlServer中char及Varchar,nVarChar和Oracle中varchar2区别及其联系所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1174222.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存