在Oracle中,VARCHAR(MAX)和VARCHAR(n)有什么区别?

3

与此问题类似,但是针对的是Oracle。

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

3个回答

8

因为它在Oracle中不起作用!如果您愿意,您可以将所有列声明为VARCHAR2(4000),但这绝非推荐做法。数据库的存储和性能不会有任何区别,但是:

  • 您失去了对可存储在该列中的合理值的约束
  • 某些客户端应用程序将分配4000字节的内存来接收从该列中获取的数据,而实际上该列只包含10个字节。

1
不仅仅是客户端应用程序,还有PL/SQL。 此外,您需要考虑当您想要将两个列连接在一起时会发生什么(例如,为信封格式化地址行)。 - Gary Myers
@Tony Andrews,您能提供一些客户端应用程序的示例吗? - IEnjoyEatingVegetables
@CodeFlava 不,我不能。 - Tony Andrews

6
可能是因为Oracle不支持VARCHAR(MAX)
Oracle中,根本不应该使用VARCHAR
目前,VARCHARVARCHAR2的同义词,但是未来可能会改变,以便区分空字符串和NULLVARCHAR应该可以做到这一点,但是在当前版本的Oracle中却没有实现,因此不应该使用。
Oracle中,VARCHAR2的最大长度为4000(在SQL中)和32767(在PL/SQL中)。
对于更大的值,您应该使用CLOB,但它与VARCHAR2非常不同。需要使用特殊方法来访问它等等。

由于VARCHAR是ANSI SQL92标准,而VARCHAR2不是,因此我不同意“在Oracle中根本不应使用VARCHAR”和“...但这可能会在未来改变”的说法。 - Emre Yazici
@eyazici:来自文档:http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/datatype.htm#sthref3784 为避免可能的行为变化,请始终使用VARCHAR2数据类型存储可变长度的字符字符串。不同意说明书并不是明智的选择,但当然这是你的选择。如果您想构建一个可能在下次升级时出现问题的Oracle应用程序,则使用VARCHAR绝对是一种方法。 - Quassnoi

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接