varchar和varchar2的区别是什么?


当前回答

就目前而言,它们是同义词。

VARCHAR由Oracle保留,以支持将来区分NULL和空字符串,正如ANSI标准所规定的那样。

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

如果你依赖空字符串和NULL是一样的东西,你应该使用VARCHAR2。

其他回答

目前,它们是一样的。但以前

我在网上看到,

VARCHAR由Oracle保留,以支持将来区分NULL和空字符串,正如ANSI标准所规定的那样。

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

同时,

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

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

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

Rextester演示Oracle 11g: 对于两个VARCHAR,空字符串都作为null插入 和VARCHAR2。 Oracle 12c的LiveSQL演示:同样的结果。

这两个关键词的历史原因在另一个问题的答案中得到了很好的解释。

就目前而言,它们是同义词。

VARCHAR由Oracle保留,以支持将来区分NULL和空字符串,正如ANSI标准所规定的那样。

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

如果你依赖空字符串和NULL是一样的东西,你应该使用VARCHAR2。

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

取自:不同点CHAR, VARCHAR, VARCHAR2

VARCHAR最多可以存储2000字节的字符,而VARCHAR2最多可以存储4000字节的字符。 如果我们将数据类型声明为VARCHAR,那么它将占用NULL值的空间。在VARCHAR2数据类型的情况下,它不会为NULL值占用任何空间。例如, 名字varchar (10)

将保留6个字节的内存,即使名称是'Ravi__',而

name varchar2(10) 

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

这里,_表示NULL。

注意:varchar将为空值保留空间,而varchar2将不为空值保留任何空间。