Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle中的varchar和varchar2有什么区别?_Oracle_Sqldatatypes - Fatal编程技术网

Oracle中的varchar和varchar2有什么区别?

Oracle中的varchar和varchar2有什么区别?,oracle,sqldatatypes,Oracle,Sqldatatypes,varchar和varchar2有什么区别?至于现在,它们是同义词 VARCHAR由Oracle保留,以支持将来区分NULL和空字符串,正如ANSI标准规定的那样 VARCHAR2不区分NULL和空字符串,而且永远不会 如果您依赖空字符串和NULL是同一事物,则应使用VARCHAR2当前VARCHAR的行为与VARCHAR2完全相同。但是,不应使用类型VARCHAR,因为它是为将来使用而保留的。 摘自: VARCHAR最多可以存储2000字节的字符,而VARCHAR2最多可以存储4000字节的字

varchar和varchar2有什么区别?

至于现在,它们是同义词

VARCHAR
Oracle
保留,以支持将来区分
NULL
和空字符串,正如
ANSI
标准规定的那样

VARCHAR2
不区分
NULL
和空字符串,而且永远不会


如果您依赖空字符串和
NULL
是同一事物,则应使用
VARCHAR2

当前VARCHAR的行为与VARCHAR2完全相同。但是,不应使用类型
VARCHAR
,因为它是为将来使用而保留的。

摘自:

  • VARCHAR最多可以存储2000字节的字符,而VARCHAR2最多可以存储4000字节的字符

  • 如果我们将数据类型声明为VARCHAR,那么它将占用空值的空间。在VARCHAR2数据类型的情况下,它不会占用空值的任何空间。e、 g

    name varchar(10)

  • 将保留6个字节的内存,即使名称为“Ravi_uuu;”,而

    name varchar2(10) 
    
    将根据输入字符串的长度保留空间。e、 例如,“Ravi_u_;”的内存为4字节

    这里,u表示NULL


    注意:varchar将为空值保留空间,而varchar2不会为空值保留任何空间。

    取自最新的稳定Oracle生产版本12.2:

    主要区别在于
    VARCHAR2
    是一种内部数据类型,而
    VARCHAR
    是一种外部数据类型。所以我们需要了解内部和外部数据类型之间的区别

    在数据库中,值存储在表的列中。在内部,Oracle以称为内部数据类型的特定格式表示数据

    通常,OCI(Oracle调用接口)应用程序不使用数据的内部数据类型表示,而是使用由编写它们的语言预定义的主机语言数据类型。在OCI客户端应用程序和数据库表之间传输数据时,OCI库会在内部数据类型和外部数据类型之间转换数据

    外部类型为程序员提供了方便,因为它可以使用宿主语言类型而不是专有数据格式。在Oracle数据库和OCI应用程序之间传输数据时,OCI可以执行范围广泛的数据类型转换。OCI外部数据类型多于Oracle内部数据类型

    VARCHAR2
    数据类型是长度可变的字符串,最大长度为4000字节。如果init.ora参数max_string_size为默认值,则
    VARCHAR2
    的最大长度可以是4000字节。如果init.ora参数max_string_size=extended,则
    VARCHAR2
    的最大长度可以是32767字节

    VARCHAR
    数据类型存储长度不同的字符串。前2个字节包含字符串的长度,其余字节包含字符串。bind或define调用中指定的字符串长度必须包括两个长度字节,因此可以接收或发送的最大
    VARCHAR
    字符串长度为65533字节,而不是65535字节

    在12.2数据库中的快速测试表明,作为一种内部数据类型,Oracle仍然将
    VARCHAR
    视为
    VARCHAR2
    的伪类型。它不是同义词,而是Oracle中的实际对象类型

    SQL> select substr(banner,1,80) from v$version where rownum=1;
    Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production    
    
    SQL> create table test (my_char varchar(20));
    Table created.
    
    SQL> desc test
    Name                 Null?    Type
    MY_CHAR                       VARCHAR2(20)
    

    VARCHAR
    对于ProC/C++预编译器选项也有一些含义。对于感兴趣的程序员,链接位于:

    经过一些实验(见下文),我可以确认,截至2017年9月,以下所述功能没有任何变化:-

  • 对于
    VARCHAR
    VARCHAR2
  • 同样的结果

  • 这两个关键字的历史原因在中有很好的解释。

    目前,它们是相同的。但是以前

  • 在网上的某个地方,我读到
  • 根据ANSI标准的规定,
    VARCHAR
    由Oracle保留,以支持将来区分
    NULL
    和空字符串

    VARCHAR2
    不区分
    NULL
    和空字符串,而且永远不会

  • 而且
  • Emp\u name varchar(10)
    -如果输入的值小于10位,则无法删除剩余空间。它总共使用了10个空格


    Emp_name varchar2(10)
    -如果您输入的值小于10位,则剩余空间将自动删除

    以前没有听说过这种原理,这很有用。谢谢记录在案,甲骨文中的主要字符类型是“varchar2”,这仍然是完全荒谬的。其他人不觉得这是一个可怕的胡扯吗?似乎我在学习编程的第一周就解决了一些问题。@Ian:主要类型是
    VARCHAR2
    ,因为目前没有任何类型的行为像
    VARCHAR
    should。事实上,在正确实现之前,您根本不应该使用
    VARCHAR
    。谢谢,@Quassnoi。所以我想最愚蠢的部分是Oracle不像其他数据库那样有一个合适的VARCHAR,那么?这里发生了一些愚蠢的事情,我敢肯定…:)@伊恩:在开发甲骨文的时候,还没有标准。当标准出台时,它已经有了遗留应用程序的负担。我们都知道它是怎么发生的。对不起,事实上是谁写的。
    其中x为NULL
    返回的结果与
    中x='
    不同,这并不意味着
    NULL
    '
    在任何方面都不同。不同的行为是由
    =
    操作符引起的。这个问题产生的几率有多大