Qua*_*noi 316
至于现在,它们是同义词.
VARCHAR
作为标准规定,将来保留Oracle
以支持区分NULL
和空字符串ANSI
.
VARCHAR2
不区分a NULL
和空字符串,永远不会.
如果你依赖空字符串并且NULL
是同一个东西,你应该使用VARCHAR2
.
san*_*man 24
摘自最新稳定的Oracle生产版本12.2: 数据类型
主要区别在于它VARCHAR2
是内部数据类型并且VARCHAR
是外部数据类型.所以我们需要了解内部和外部数据类型之间的区别......
在数据库内部,值存储在表的列中.在内部,Oracle以特定格式表示数据,称为内部数据类型.
通常,OCI(Oracle调用接口)应用程序不能与数据的内部数据类型表示一起使用,而是使用由编写它们的语言预定义的宿主语言数据类型.在OCI客户端应用程序和数据库表之间传输数据时,OCI库会在内部数据类型和外部数据类型之间转换数据.
外部类型通过使用主机语言类型而不是专有数据格式,为程序员提供了便利.在Oracle数据库和OCI应用程序之间传输数据时,OCI可以执行各种数据类型转换.OCI外部数据类型多于Oracle内部数据类型.
的VARCHAR2
数据类型是具有4000个字节的最大长度字符的可变长度的字符串.如果init.ora参数max_string_size是default,则a的最大长度VARCHAR2
可以是4000字节.如果init.ora参数max_string_size = extended,则a的最大长度VARCHAR2
可以是32767字节
的VARCHAR
不同长度的数据类型存储字符串.前2个字节包含字符串的长度,其余字节包含字符串.bind或define调用中指定的字符串长度必须包含两个长度字节,因此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)
Run Code Online (Sandbox Code Playgroud)
VARCHAR
ProC/C++预编译器选项也有一些含义.对于感兴趣的程序员,链接位于:Pro*C/C++程序员指南