varchar 和 varchar2 有什么区别?

有帮助吗?

解决方案

至于现在,他们是同义词。

VARCHAROracle保留支持NULL和在未来的空字符串之间的区别,ANSI标准规定。

VARCHAR2并不一个NULL和空字符串之间永远不会。

区分,并且

如果你依赖于空字符串和NULL是同样的事情,你应该使用VARCHAR2

其他提示

<强>目前VARCHAR行为完全一样VARCHAR2。然而,由于它被保留以供将来使用不应该被使用的类型VARCHAR

来自 CHAR之间的差异,VARCHAR,VARCHAR2

从最新的稳定的Oracle生产版本12.2摘自: 数据类型

的主要区别是,VARCHAR2被一个内部数据类型VARCHAR外部数据类型。因此,我们需要理解的内部和外部的数据类型之间的区别...

在数据库中,值被存储在列在表中。在内部,甲骨文表示在已知为特定格式的数据的内部数据类型

在一般情况下,OCI(Oracle调用接口)的应用程序不与数据的内部数据类型表示工作,但与由在它们所用的语言中预定义宿主语言数据类型。当数据被一个OCI客户端应用程序和数据库之间表转让的,OCI库将内部数据类型和外部数据类型之间的数据。

外部类型通过使得能够与主机语言类型,而不是专有数据格式的工作为程序员提供了便利。 OCI可以Oracle数据库和OCI应用之间传送数据时执行各种数据类型转换的。还有更多的OCI外部数据类型比Oracle内部数据类型。

VARCHAR2数据类型是字符的具有4000个字节的最大长度的可变长度的字符串。如果init.ora参数max_string_size是缺省情况下,VARCHAR2的最大长度可以是4000个字节。如果init.ora参数max_string_size =扩展,一个VARCHAR2的最大长度可以是32767个字节

不同长度的VARCHAR数据类型存储字符串。前2个字节包含字符串的长度,而剩余的字节包含字符串。字符串中的绑定指定的长度或一个定义呼叫必须包括两个长度字节,从而能够接收或发送最大VARCHAR字符串是65533个字节长,而不是65535。

在12.2数据库快速测试表明,作为内部数据类型中,Oracle仍然把一个VARCHAR作为VARCHAR2。它不是一个SYNONYM这是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 ++预编译选项的一些影响。对于程序员谁有兴趣,链接是: PRO * C / C ++程序员指南

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

  1. Oracle 11g 的 Rextester 演示:空字符串插入为 NULLs 代表两者 VARCHARVARCHAR2.
  2. Oracle 12c 的 LiveSQL 演示: 结果相同。

这两个关键字的历史原因在 对另一个问题的回答.

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

  1. 我在网上的某个地方读到,

VARCHAR 由 Oracle 保留以支持区分 NULL 并按照 ANSI 标准规定,将来为空字符串。

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

  1. 还,

Emp_name varchar(10) - 如果您输入的值少于 10 位,则剩余空间无法删除。它总共使用了 10 个空格。

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

  1. VARCHAR 最多可以存储 2000 个字节的字符,而 VARCHAR2 最多可以存储 4000 个字节的字符。

  2. 如果我们将数据类型声明为 VARCHAR 那么它将占用 NULL 值的空间。对于 VARCHAR2 数据类型,它不会为 NULL 值占用任何空间。例如。,

    name varchar(10)

即使名称是“Ravi__”,也会保留 6 个字节的内存,而

name varchar2(10) 

会根据输入字符串的长度预留空间。例如,“Ravi__”需要 4 个字节的内存。

这里,_代表NULL。

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

不同之处:

  • VARCHAR 最多可存储 2000 个字节的字符 VARCHAR2 最多可存储4000字节的字符。
  • 如果我们将数据类型声明为 VARCHAR 那么它将占据空间 NULL 值,如果 VARCHAR2 数据类型它不会占用任何空间。

相似:

  • VARCHARVARCHAR2 两者都具有可变的特征。

来源

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top