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将不为空值保留任何空间。
推荐文章
- Oracle中的双表是什么?
- Oracle中不区分大小写的搜索
- 如何在Oracle SQL开发者中导出查询结果到csv ?
- Oracle SQL Developer多表视图
- 如何在Oracle中做top 1 ?
- Oracle Partition By关键字
- 如何使用服务名而不是SID连接到Oracle
- 从多个表中选择count(*)
- 内部连接vs Where
- 我如何列出一个表中的所有列?
- 如何在不复制数据的情况下创建Oracle表的副本?
- Oracle中的varchar和varchar2有什么区别?
- SQL Server文本类型vs. varchar数据类型
- 如何在Oracle中查找表中的重复值?
- Oracle SQL:用另一个表的数据更新一个表