Oracle中的varchar和varchar2有什么区别?
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
由Oracle
保留,以支持将来区分NULL
和空字符串,正如ANSI
标准规定的那样
VARCHAR2
不区分NULL
和空字符串,而且永远不会
如果您依赖空字符串和
NULL
是同一事物,则应使用VARCHAR2
当前VARCHAR的行为与VARCHAR2完全相同。但是,不应使用类型VARCHAR
,因为它是为将来使用而保留的。
摘自:
name varchar(10)
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
这两个关键字的历史原因在中有很好的解释。目前,它们是相同的。但是以前
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
和'
在任何方面都不同。不同的行为是由=
操作符引起的。这个问题产生的几率有多大