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最多可存储2000字节的字符,而VARCHAR2最多可存储4000字节的字符。 1.如果我们将数据类型声明为VARCHAR,则它将为NULL值占用空间。在VARCHAR2数据类型的情况下,它不会为NULL值占用任何空间。例如, name varchar(10) 将保留6字节内存,即使名称为“Ravi__”,而
6条答案
按热度按时间jw5wzhpr1#
就目前而言,它们是同义词。
VARCHAR
由Oracle
保留,以支持将来区分NULL
和空字符串,如ANSI
标准所规定的。VARCHAR2
不区分NULL
和空字符串,也永远不会区分。如果你认为空字符串和
NULL
是同一个东西,你应该使用VARCHAR2
。v1l68za42#
当前VARCHAR的行为与VARCHAR2完全相同。但是,不应使用类型
VARCHAR
,因为它是为将来使用而保留的。取自:Difference Between CHAR, VARCHAR, VARCHAR2
mctunoxg3#
摘自最新稳定的Oracle生产版本12.2:数据类型
主要区别在于
VARCHAR2
是 * 内部数据类型 *,而VARCHAR
是 * 外部数据类型 *,因此我们需要了解内部数据类型和外部数据类型之间的区别......在数据库内部,值存储在表的列中。在内部,Oracle以特定格式表示数据,称为 * 内部数据类型 *。
通常,OCI(Oracle Call Interface)应用程序不使用数据的内部数据类型表示法,而是使用由编写语言预定义的主机语言数据类型。在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个字节包含字符串的长度,其余字节包含字符串。绑定或定义调用中指定的字符串长度必须包括两个长度字节,因此可以接收或发送的最大VARCHAR
字符串长度为65533字节,而不是65535字节。在12.2数据库中进行的快速测试表明,作为 * 内部数据类型 *,Oracle仍然将
VARCHAR
视为VARCHAR2
的 * 伪类型 *。它不是Oracle中的实际对象类型SYNONYM
。对于ProC/C ++预编译器选项,
VARCHAR
也有一些含义。对于感兴趣的程序员,链接位于:Pro * C/C ++程序员指南31moq8wy4#
经过一些实验(见下文),我可以确认,截至2017年9月,在接受的答案中描述的功能没有任何变化:-
1.对于
VARCHAR
和VARCHAR2
,空字符串将作为NULL
s插入。nhhxz33t5#
1.如果我们将数据类型声明为VARCHAR,则它将为NULL值占用空间。在VARCHAR2数据类型的情况下,它不会为NULL值占用任何空间。例如,
name varchar(10)
将保留6字节内存,即使名称为“Ravi__”,而
将根据输入字符串的长度保留空间。例如,为“Ravi__”保留4个字节的内存。
这里,_表示NULL。
注意:varchar将为空值保留空间,varchar2将不为空值保留任何空间。
vdzxcuhz6#
目前,它们是相同的。但以前
1.我在网上看到过,
VARCHAR
被Oracle保留,以支持将来ANSI标准规定的NULL
和空字符串之间的区分。VARCHAR2
不区分NULL
和空字符串,也永远不会区分。1.另外,
Emp_name varchar(10)
-如果您输入的值小于10位,则无法删除剩余空间。它总共使用了10个空间。Emp_name varchar2(10)
-如果您输入的值少于10位,则剩余空间将自动删除