Oracle中varchar和varchar2有什么区别?
-
19-09-2019 - |
题
varchar 和 varchar2 有什么区别?
解决方案
至于现在,他们是同义词。
VARCHAR
由Oracle
保留支持NULL
和在未来的空字符串之间的区别,ANSI
标准规定。
VARCHAR2
并不一个NULL
和空字符串之间永远不会。
如果你依赖于空字符串和NULL
是同样的事情,你应该使用VARCHAR2
。
其他提示
<强>目前VARCHAR行为完全一样VARCHAR2。然而,由于它被保留以供将来使用不应该被使用的类型VARCHAR
。强>
从最新的稳定的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 月,中描述的功能没有任何变化 接受的答案:-
- Oracle 11g 的 Rextester 演示:空字符串插入为
NULL
s 代表两者VARCHAR
和VARCHAR2
. - Oracle 12c 的 LiveSQL 演示: 结果相同。
这两个关键字的历史原因在 对另一个问题的回答.
目前,它们是相同的。但以前
- 我在网上的某个地方读到,
VARCHAR
由 Oracle 保留以支持区分 NULL
并按照 ANSI 标准规定,将来为空字符串。
VARCHAR2
不区分 NULL
和空字符串,并且永远不会。
- 还,
Emp_name varchar(10)
- 如果您输入的值少于 10 位,则剩余空间无法删除。它总共使用了 10 个空格。
Emp_name varchar2(10)
- 如果您输入的值少于 10 位数字,则剩余空间将自动删除
VARCHAR 最多可以存储 2000 个字节的字符,而 VARCHAR2 最多可以存储 4000 个字节的字符。
如果我们将数据类型声明为 VARCHAR 那么它将占用 NULL 值的空间。对于 VARCHAR2 数据类型,它不会为 NULL 值占用任何空间。例如。,
name varchar(10)
即使名称是“Ravi__”,也会保留 6 个字节的内存,而
name varchar2(10)
会根据输入字符串的长度预留空间。例如,“Ravi__”需要 4 个字节的内存。
这里,_代表NULL。
笔记:varchar 将为空值保留空间,而 varchar2 不会为空值保留任何空间。
不同之处:
VARCHAR
最多可存储 2000 个字节的字符VARCHAR2
最多可存储4000字节的字符。- 如果我们将数据类型声明为
VARCHAR
那么它将占据空间NULL
值,如果VARCHAR2
数据类型它不会占用任何空间。
相似:
VARCHAR
和VARCHAR2
两者都具有可变的特征。