Sql Oracle中的VARCHAR(MAX)与VARCHAR(n)

Sql Oracle中的VARCHAR(MAX)与VARCHAR(n),sql,oracle,plsql,types,Sql,Oracle,Plsql,Types,类似,但对甲骨文而言 为什么我不总是想选择VARCHAR(MAX)?可能是因为Oracle不支持VARCHAR(MAX) VARCHAR不应在Oracle中使用 就目前而言,它是VARCHAR2的同义词,但将来可能会更改,以便区分空字符串和NULL VARCHAR应该这样做,但在当前版本的Oracle中没有,因此不应使用 在Oracle中,VARCHAR2在SQL中的最大长度为4000,在PL/SQL中的最大长度为32767 对于较大的值,应该使用CLOB,但它与VARCHAR2非常不同。您应该

类似,但对甲骨文而言


为什么我不总是想选择VARCHAR(MAX)?

可能是因为
Oracle
不支持
VARCHAR(MAX)

VARCHAR
不应在
Oracle
中使用

就目前而言,它是
VARCHAR2
的同义词,但将来可能会更改,以便区分空字符串和
NULL

VARCHAR
应该这样做,但在当前版本的
Oracle
中没有,因此不应使用

Oracle
中,
VARCHAR2
SQL
中的最大长度为
4000
,在
PL/SQL
中的最大长度为
32767


对于较大的值,应该使用
CLOB
,但它与
VARCHAR2
非常不同。您应该使用特殊的方法来访问它,等等。

因为它在Oracle中不起作用!如果需要,可以将所有列声明为VARCHAR2(4000),但无论如何都不建议这样做。数据库的存储或性能不会有差异,但:

  • 您失去了对可存储在列中的合理值的约束
  • 一些客户端应用程序将分配4000字节的内存来接收来自该列的数据,而(比如)该列只包含10个字节

首先,Oracle没有VARCHAR(MAX)数据类型

参考:


不仅仅是客户端应用程序,还有PL/SQL。此外,您还需要考虑当您要将两个列连接在一起时发生的情况(例如,为信封设置一个地址行)。@ Tony Andrews,您能提供什么类型的客户端应用程序会这样做的例子吗?@ CordRuffa,我不能,因为VARCHAR是ANSI SqL92标准,VARCHAR2不是,我不同意。“在Oracle中根本不应该使用VARCHAR”和“。。。但将来可能会改变。。。语句。@eyazici:来自文档:为了避免可能的行为更改,请始终使用
VARCHAR2
数据类型来存储可变长度字符串。不同意使用说明书不是最明智的做法,但这当然是你的选择。如果您想构建一个可能在下一次升级时崩溃的
Oracle
应用程序,那么使用
VARCHAR
无疑是一个不错的选择。