精华内容
下载资源
问答
  • oracle独特的数据类型在oracle里使用存储过程时,如果遇到一个字段字段经常被修改,比如拼接sql语句或者用游标修改某个表字段,这种情况下使用varchar类型。varchar类型固定长度的,而var...

    Q:PL/SQL中 varchar 和 varchar2有什么区别?

    A:

    varchar       存放的字符数据最长2000。

    varchar2    存放字符数据最大长度为4000字。 它是oracle独特的数据类型

    在oracle里使用存储过程时,如果遇到一个字段字段经常被修改,比如拼接sql语句或者用游标修改某个表字段,这种情况下使用varchar类型。varchar类型是固定长度的,而varchar2是变化的一个长度,修改的效率相对较低。

    varchar2和varchar的目前没有区别,不过以后的版本就不支持varchar类型,如果想新版本的数据库兼容就不要用varchar,如果想和其它数据库兼容就不要用varchar2.

    1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节;

    2.VARCHAR2把空串等同于null处理,而varchar仍按照空串处理;

    3.VARCHAR2字符要用几个字节存储,要看数据库使用的字符集,

    大部分情况下建议使用varchar2类型,可以保证更好的兼容性。

    Q:SQLServer中varchar和nvarchar有什么区别?

    A:varchar(n)长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。nvarchar(n)包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。两字段分别有字段值:我和coffee那么varchar字段占2×2+6=10个字节的存储空间,而nvarchar字段占8×2=16个字节的存储空间。如字段值只是英文可选择varchar,而字段值存在较多的双字节(中文、韩文等)字符时用nvarchar上面是一个总结介绍,通过上面的介绍,可以知道。varchar(4) 可以输入4个字线,也可以输入两个汉字nvarchar(4) 可以输四个汉字,也可以输4个字母,但最多四个

    展开全文
  • char定长字符类型,而...有数据”test”分别存放到char(10)和varchar2(10)类型的字段中,其存储长度及类型? 用char(10)进行存储时,存储被补齐10个空格,其长度为10个字节,而varchar2的存储长度为4个字节。...
    char是定长字符类型,而varchar是变长字符类型。
    有数据”test”分别存放到char(10)和varchar2(10)类型的字段中,其存储长度及类型?
    用char(10)进行存储时,存储被补齐10个空格,其长度为10个字节,而varchar2的存储长度为4个字节。
    展开全文
  • Q:PL/SQL中 varchar 和 varchar2什么区别?... 它oracle独特的数据类型  在oracle里使用存储过程时,如果遇到一个字段字段经常被修改,比如拼接sql语句或者用游标修改某个表字段,这种情况下
    Q:PL/SQL中 varchar 和 varchar2有什么区别?


      A:


      varchar       存放的字符数据最长2000。


      varchar2    存放字符数据最大长度为4000字。 它是oracle独特的数据类型


      在oracle里使用存储过程时,如果遇到一个字段字段经常被修改,比如拼接sql语句或者用游标修改某个表字段,这种情况下使用varchar类型。varchar类型是固定长度的,而varchar2是变化的一个长度,修改的效率相对较低。


      varchar2和varchar的目前没有区别,不过以后的版本就不支持varchar类型,如果想新版本的数据库兼容就不要用varchar,如果想和其它数据库兼容就不要用varchar2.


      1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节;


      2.VARCHAR2把空串等同于null处理,而varchar仍按照空串处理;


      3.VARCHAR2字符要用几个字节存储,要看数据库使用的字符集,


      大部分情况下建议使用varchar2类型,可以保证更好的兼容性。


      Q:SQLServer中varchar和nvarchar有什么区别?


      A:varchar(n)长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。nvarchar(n)包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。两字段分别有字段值:我和coffee那么varchar字段占2×2+6=10个字节的存储空间,而nvarchar字段占8×2=16个字节的存储空间。如字段值只是英文可选择varchar,而字段值存在较多的双字节(中文、韩文等)字符时用nvarchar上面是一个总结介绍,通过上面的介绍,可以知道。varchar(4) 可以输入4个字线,也可以输入两个汉字nvarchar(4) 可以输四个汉字,也可以输4个字母,但最多四个

    如果想了解更多相关的资料请关注(www.zx808.com   装饰行业网)官网

    展开全文
  • oracle中char和varchar2数据类型的区别

    千次阅读 2013-01-02 19:36:45
    Oracle中char和varchar2数据类型什么区别?有数据”test”分别存放到char(10)和varchar2(10) 类型的字段中,其存储长度及类型有何区别? 首先解释一下: CHAR的长度固定的,而VARCHAR2的长度可以变化的。...

    Oracle中char和varchar2数据类型有什么区别?有数据”test”分别存放到char(10)和varchar2(10)
    类型的字段中,其存储长度及类型有何区别?

    首先解释一下:

    CHAR的长度是固定的,而VARCHAR2的长度是可以变化的。比如存储的字符串是:“liming”那么在char中占10个字符,包括“liming” + 3个空格。在varchar2中长度为7。

    char的效率比varchar2的效率稍高。

    char和varchar是一对矛盾体。但是存在即是合理。

    VARCHAR2虽然比CHAR节省空间,但是假如一个VARCHAR2列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用CHAR代替VARCHAR2会更好一些。

     

    一下内容来自:http://blog.csdn.net/ningoo/article/details/1445922

    char

    char类型保存定长字符串,最小长度为1字节(或字符数),最长2000字节(注意这里是字节,而不是字符数),如果不指定,则默认为1。

    SQL> create table t(name char);

    表已创建。

    SQL> desc t;
    名称 是否为空? 类型
    ----------------------------------------- -------- ----------------------------
    NAME CHAR(1)

    SQL> create table t(name char(2001));
    create table t(name char(2001))
    *
    第 1 行出现错误:
    ORA-00910: 指定的长度对于数据类型而言过长

    如果插入的字符串长度不足,会以空格填充。如果超过长度,则会报错。

    SQL> insert into t values('aa');
    insert into t values('aa')
    *
    第 1 行出现错误:
    ORA-12899: 列 "SYS"."T"."NAME" 的值太大 (实际值: 2, 最大值: 1)

    下面是例子展示了关于char类型的插入后续空格值的问题:
    SQL> create table t(name char(20));

    表已创建。

    SQL> insert into t values('a');

    已创建 1 行。

    SQL> insert into t values('a ');

    已创建 1 行。

    SQL> select '"'||name||'"' from t where name='a';

    '"'||NAME||'"'
    ----------------------
    "a "
    "a "

    SQL> select '"'||name||'"' from t where name='a ';

    '"'||NAME||'"'
    ----------------------
    "a "
    "a "

    SQL> insert into t values(' a');

    已创建 1 行。

    SQL> select '"'||name||'"' from t where name='a';

    '"'||NAME||'"'
    ----------------------
    "a "
    "a "

    SQL> select '"'||name||'"' from t where name=' a';

    '"'||NAME||'"'
    ----------------------
    " a "

    可以看到,如果插入的字符串最后带有空格,对于定长的字符串的比较,oracle会将较短的字符串右边填上空格,直到对比的两边的字符串长度一致。

    varchar2和varchar

    varchar2和varchar是同义词,都是指变长字符串类型。但是由于某种原因,varchar可能在后续版本中改变varchar的意思还是怎么的,oracle建议使用varchar2。

    在使用varchar2类型时必须指定其长度(最小1字节或字符数,最大4000字节),不能像char一样省略,虽然concepts文档上说其默认为1。这里不知道oracle为什么会这样实现,我认为这应该算是一个缺陷。

    SQL> drop table t;

    表已删除。

    SQL> create table t(name varchar);
    create table t(name varchar)
    *
    第 1 行出现错误:
    ORA-00906: 缺失左括号


    SQL> create table t(name varchar2);
    create table t(name varchar2)
    *
    第 1 行出现错误:
    ORA-00906: 缺失左括号

    由于varchar2不会在短于指定长度的字符串后面补齐空格,所以char类型中的后续空格问题不会在varchar2类型中发生。

    SQL> create table t(name varchar2(20));

    表已创建。

    SQL> insert into t values('a');

    已创建 1 行。

    SQL> insert into t values('a ');

    已创建 1 行。

    SQL> select '"'||name||'"' from t where name='a';

    '"'||NAME||'"'
    ----------------------
    "a"

    SQL> select '"'||name||'"' from t where name='a ';

    '"'||NAME||'"'
    ----------------------
    "a "

    关于字符型数据的长度问题

    前面在说到char/varchar2类型时,指定其长度可能是1字节或者1个字符数。在不同的编码方式中,一个字符可能占1字节,2字节,3字节甚至4字节。

    SQL> select name,value$ from props$ where name='NLS_CHARACTERSET';

    NAME VALUE$
    ------------------------------ ------------------------------
    NLS_CHARACTERSET ZHS16GBK

    SQL> create table t(name char(1 byte));

    表已创建。

    SQL> insert into t values('测');
    insert into t values('测')
    *
    第 1 行出现错误:
    ORA-12899: 列 "SYS"."T"."NAME" 的值太大 (实际值: 2, 最大值: 1)

    SQL> create table t(name char(1 char));

    表已创建。

    SQL> insert into t values('测');

    已创建 1 行。

    SQL> create table t(name char(1));

    表已创建。

    SQL> insert into t values('测');
    insert into t values('测')
    *
    第 1 行出现错误:
    ORA-12899: 列 "SYS"."T"."NAME" 的值太大 (实际值: 2, 最大值: 1)

    可以看到,由于一个汉字占两个byte,如果char/varchar2的长度是按byte计算的,那么就无法插入,如果是按字符数计算的,则可以插入。而在默认情况下,oracle是按byte计算长度的,这是由于参数nls_length_semantics的默认值是byte。

    SQL> show parameter nls_length

    NAME TYPE VALUE
    ------------------------------------ ----------- ------------------------------
    nls_length_semantics string BYTE

    但是,char类型的最大上限是2000字节,而不是2000字符数。

    SQL> drop table t;

    表已删除。

    SQL> create table t(name char(2000 char));

    表已创建。

    SQL> insert into t values(lpad('测',2000,'测'));

    已创建 1 行。

    SQL> select length(name) from t;

    LENGTH(NAME)
    ------------
    1000

    SQL> select lengthb(name) from t;

    LENGTHB(NAME)
    -------------
    2000

    SQL> insert into t values(lpad('测',2002,'测'));
    insert into t values(lpad('测',2002,'测'))
    *
    第 1 行出现错误:
    ORA-12899: 列 "SYS"."T"."NAME" 的值太大 (实际值: 2002, 最大值: 2000)

    从上面的例子可以看出,最多只能插入1000个字符。顺便提一下,在lpad/rpad函数中,第二个参数也是指的字节数,而不是字符数。并且,lpad/rpad的输出也是varchar2类型的,所以第二个参数不能超过4000,如果超过,会被截断成4000。

    在数据字典中,oracle还是会将按字符数计算的长度,按照系统当前的字符集选择,转换成按字节计算的长度。由于我目前的测试系统中使用的ZHS16GBK字符集是定长字符集,每个字符占两个字节,所以这里data length为2。在一些变长字符集中,比如UTF8,则是4(UTF8中一个字符最长占4个字节)
    SQL> drop table t;

    表已删除。

    SQL> create table t(name char(1 char));

    表已创建。

    SQL> select TABLE_NAME,COLUMN_NAME,DATA_TYPE,DATA_LENGTH from dba_tab_columns where

    table_name='T' a
    nd owner=user;

    TABLE_NAME COLUMN_NAM DATA_TYPE DATA_LENGTH
    ---------- ---------- ---------- -----------
    T NAME CHAR 2


    但是,oracle在判断插入的时候不是以dba_tab_columns中记录的data_length来做为限制条件的。看看UTF8下的试验结果:

    SQL> select name,value$ from props$ where name='NLS_CHARACTERSET';

    NAME VALUE$
    ------------------------------ ------------------------------
    NLS_CHARACTERSET AL32UTF8

    SQL> drop table t;

    表已删除。

    SQL> create table t(name char(1 char));

    表已创建。

    SQL> select TABLE_NAME,COLUMN_NAME,DATA_TYPE,DATA_LENGTH from dba_tab_columns where
    2 table_name='T' and owner=user;

    TABLE_NAME COLUMN_NAM DATA_TYPE DATA_LENGTH
    ---------- ---------- ---------- -----------
    T NAME CHAR 4

    SQL> insert into t values('aa');
    insert into t values('aa')
    *
    第 1 行出现错误:
    ORA-12899: 列 "SYS"."T"."NAME" 的值太大 (实际值: 2, 最大值: 1)

    SQL> insert into t values('a');

    已创建 1 行。

    SQL> insert into t values('测');

    已创建 1 行。

    SQL> select dump(name) from t;

    DUMP(NAME)
    --------------------------------------------------------------------------------
    Typ=96 Len=1: 97
    Typ=96 Len=3: 230,181,139

    可以看到,一个英文字符占一个字节,那么'aa'只占两个字节,却无法插入。'测'占3个字节,却能插入。所以在判断插入的数据是否符合长度要求时,oracle会根据定义的数据类型是按字节还是按字符数,然后参考系统当前的字符集设置来做出正确的判断。

    实际上,oracle提供的求字符串长度的函数length,返回的也是字符个数,而非字节数:
    SQL> select length('a') from dual;

    LENGTH('A')
    -----------
    1

    SQL> select length('测') from dual;

    LENGTH('测')
    ------------
    1

    而lengthb返回的才是字节数:

    SQL> select lengthb('a') from dual;

    LENGTHB('A')
    ------------
    1

    SQL> select lengthb('测') from dual;

    LENGTHB('测')
    -------------
    3

    展开全文
  • varchar2是oracle提供的独特的数据类型, oracle保证在任何版本中该数据类型向上向下兼容, 但不保证varchar,这是因为varchar是标准sql提供的数据类型, 有可能随着sql标准的变化而改变 , varchar和varchar2在...
  • oracle转成mysql时:varchar2(10)可以转成varchar(10)number则要看oracle中存储的具体是什么类型数据:1、如果是整型,那么mysql中,用int即可;2、如果是带小数位的,那么mysql中可用numeric类型。注:mysql中...
  • 在网上看到用KeyHelper 可以得到数字类型的主键,但是表的主键guid是varchar类型的,用Spring的jdbcTemplate有什么方法可以得到新插入数据的主键? 用的Hibernate 数据库Oracle 求大神帮忙了啊! 不用先插入了...
  • 一、char和varchar类型char和varchar类型类似,都用来存储字符串,但是它们保存和检索字符串的方式不同。char属于固定长度的字符类型varchar属于可变长度的字符类型。例如:对于char(4)和varchar(4)这两种类型定义...
  • varchar,nchar类型区别1、char 类型是一个字节 char(8)只能存8字母,char定长,不足长度加SPACE2、nchar 类型是双字节 nchar(8)能存8个汉字,nchar能包含汉字,包含 n 个字符的固定长度 Unicode 字符数据。...
  • 1.varchar2是oracle提供的独特的数据类型 oracle保证在任何版本中该数据类型向上和向下兼容 但不保证varchar,这是因为varchar是标准sql提供的数据类型 有可能随着sql标准的变化而改变。2.char对于不够位数的用空格...
  • oracle转成mysql时:varchar2(10)可以转成varchar(10)number则要看oracle中存储的具体是什么类型数据:1、如果是整型,那么mysql中,用int即可;2、如果是带小数位的,那么mysql中可用numeric类型。 注:mysql中...
  • 在创建数据表的时候,我们经常会给每一个字段设置一个长度,例如:int(5)、varchar(10) 等等,但是他们代表的意思是什么呢?是该列允许存储值的最大宽度吗? 场景1:为什么我设置成 int(1), 也一样能存 101001000 ...
  • 文章目录nvarchar类型varchar类型写在前面一、nvarchar是什么2.读入数据总结 写在前面 笔者今天在阅读一份数据库设计时观察到表中大量使用了nvarchar这一类型,发现自己对此了解的太少,比如它是什么类型,和...
  • oracle转成mysql时:varchar2(10)可以转成varchar(10)number则要看oracle中存储的具体是什么类型数据:1、如果是整型,那么mysql中,用int即可;2、如果是带小数位的,那么mysql中可用numeric类型。 注:mysql中...
  • BYTE,用字节指定:VARCHAR2(10 BYTE)。这能支持最多10字节的数据,在一个多字节字符集中,这可能只是两个字符。采用多字节字符集时,字节与字符并不相同。 CHAR,用字符指定:VARCHAR2(10 CHAR)。这将支持最多10...
  • (时间类型数据:可以使用varchar类型,可以使用int类型,也可以使用时间戳类型)2、使用简单的数据类型,int要比varchar类型在mysql处理上简单。(int类型存储时间最好的选择)3、尽可能的使用not null...
  • varchar类型存储变长字段的字符类型,当存储的字符串长度小于255字节时,其需要1字节的空间,当大于255字节时,需要2字节的空间。 使用2 ^ n长度更好的磁盘或内存块对齐。对齐块更快。今天“块”的大小更大,...
  • varchar2陷阱

    2014-03-19 09:34:46
    oracle数据库相信大家都比较熟悉,数据库中有一种非常常用的数据类型:字符串型。 对应该类型,在oracle中有三种比较常用的类型:varchar2(byte)、varchar2(char)、nvarchar2()。 那么这三种类型到底有什么...
  • varchar2(byte)、varchar2(char)、nvarchar2()。 Oracle数据库相信大家都...首先,我们要时刻记清:无论是varchar2还是nvarchar2,最多可以存储4000字节。 varchar2(byte): 就是默认的表示方式,比如我们写成:varcha
  • 一、第一种char(n)和varchar(n)的区别:在这里我们可以清楚的看到他们表面的区别就是前面是否有var,在这里解释一下var是什么意思,var代表“可变的”的意思下面看个例子:char(4)//char代表的是字符的意思,这在Java...
  • 数字:整型:tinyint int bigint小数:float :在位数比较短的情况下不精准double :在位数比较长的情况下不精准decimal:(如果用小数,则用推荐使用decimal)精准 内部原理以字符串形式去存#2. 字符串:char(10)...
  • CHAR与VARCHAR区别:(都用来存储字符串的)保存和检索的方式不同。char属于固定长度的字符类型,而VARCHAR属于可变长的...2、char固定长度,处理速度比varchar快得多,缺点浪费存储空间,程序需要在尾部空格...
  • 数据类型 整数:int , bit(1) 小数:decimal 字符串:varchar,char 日期时间:date,time,detetime 枚举类型(enum):enum(‘男’,‘女’,‘中性’) default’男’ 浮点数(decimal):decimal(5,2)表示共存5...
  • ORACLE VARCHAR2最大长度问题

    千次阅读 2019-04-25 15:53:08
    VARCHAR2数据类型的最大长度问题,一个让人迷惑的问题,因为VARCHAR2既分PL/SQL Data Types中的变量类型,也分Oracle Database中的字段类型。简单的说,要看你在什么应用场景下,否则难以回答VARCHAR2数据类型的...
  • VARCHAR2数据类型的最大长度问题,一个让人迷惑的问题,因为VARCHAR2既分PL/SQL Data Types中的变量类型,也分Oracle Database中的字段类型。简单的说,要看你在什么应用场景下,否则难以回答VARCHAR2数据类型的...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 347
精华内容 138
关键字:

varchar2是什么数据类型