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

gblwokeq  于 2023-01-30  发布在  Oracle
关注(0)|答案(6)|浏览(454)

varchar和varchar2的区别是什么?

jw5wzhpr

jw5wzhpr1#

就目前而言,它们是同义词。
VARCHAROracle保留,以支持将来区分NULL和空字符串,如ANSI标准所规定的。
VARCHAR2不区分NULL和空字符串,也永远不会区分。
如果你认为空字符串和NULL是同一个东西,你应该使用VARCHAR2

v1l68za4

v1l68za42#

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

取自:Difference Between CHAR, VARCHAR, VARCHAR2

mctunoxg

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

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)

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

31moq8wy

31moq8wy4#

经过一些实验(见下文),我可以确认,截至2017年9月,在接受的答案中描述的功能没有任何变化:-
1.对于VARCHARVARCHAR2,空字符串将作为NULL s插入。

  1. LiveSQL demo for Oracle 12c:结果相同。
  • 这两个关键字的历史原因在另一个问题的答案中有很好的解释。*
nhhxz33t

nhhxz33t5#

  1. VARCHAR最多可存储2000字节的字符,而VARCHAR2最多可存储4000字节的字符。
    1.如果我们将数据类型声明为VARCHAR,则它将为NULL值占用空间。在VARCHAR2数据类型的情况下,它不会为NULL值占用任何空间。例如,
    name varchar(10)
    将保留6字节内存,即使名称为“Ravi__”,而
name varchar2(10)

将根据输入字符串的长度保留空间。例如,为“Ravi__”保留4个字节的内存。
这里,_表示NULL。
注意:varchar将为空值保留空间,varchar2将不为空值保留任何空间。

vdzxcuhz

vdzxcuhz6#

目前,它们是相同的。但以前
1.我在网上看到过,
VARCHAR被Oracle保留,以支持将来ANSI标准规定的NULL和空字符串之间的区分。
VARCHAR2不区分NULL和空字符串,也永远不会区分。
1.另外,
Emp_name varchar(10)-如果您输入的值小于10位,则无法删除剩余空间。它总共使用了10个空间。
Emp_name varchar2(10)-如果您输入的值少于10位,则剩余空间将自动删除

相关问题