在Oracle中,varchar(max)的等价物是什么?
CLOB(字符大对象)。
在Oracle中,varchar(max)的等价物是什么?
CLOB(字符大对象)。
Varchars在Oracle中限制为4000个字符。除此之外,您必须使用LONG或CLOB。建议优先使用CLOBs,LONG是较老的等效类型。
根据Oracle文档:
LOB与LONG和LONG RAW的区别
LOBs在许多方面都不同于较老的LONG和LONG RAW数据类型。
- LOB的最大大小为4 GB,而LONG和LONG RAW的最大大小为2 GB。
- 您可以对LOB使用随机访问和顺序访问方法;但只能对LONG和LONG RAW使用顺序访问方法。
- LOB(除了NCLOB)可以是您定义的对象类型的属性。
- 表可以有多个LOB列,但只能有一个LONG或LONG RAW列。
建议将现有的LONG和LONG Raw属性迁移到LOB。Oracle计划在未来的发行版中停止支持LONG和LONG RAW类型。有关迁移的更多信息,请参见Oracle8迁移。
据我所了解,VARCHAR(MAX) 数据类型是 SQL Server 2005 特有的一种指定文本字段的方式,可以是小型的(在 SQL Server 中最多8000个字符)或大型的(在 SQL Server 中最多2GB)。随着内容从小范围增长到大范围,数据库会处理存储的更改在幕后。
Oracle 没有相应的数据类型。
您可以使用 VARCHAR2 存储小型文本(在 pl/sql 中最多32767字节,在表定义中最多4000字节),或者您可以使用 CLOB 存储潜在很大的文本(它是一种专用的 BLOB 数据类型)。
在PL/SQL中,VARCHAR2可以达到32767字节。对于SQL而言,限制为4000字节(如果您使用多字节字符集,则可能少于4000个字符)。
Oracle 11g Gateway将Varchar(Max)转换为LONG,这很不方便,也给我们在将SQL Server数据加载到Oracle中造成了重大问题。
请查看以下网址获取更多详细信息:- http://docs.oracle.com/cd/B28359_01/gateways.111/b31049/apa.htm
我过去使用的一种方法(MS SQL,在Varchar(max)之前):
在表中放置两个列,一个小型Varchar(例如255),另一个是Text。然后构建您的应用程序,使其使用Varchar列处理小数据,将Text保留为空。如果数据大于Varchar,则将其保留为空并存储在Text中。这样,小数据不会占用服务器上的单独页面。这里的权衡是所有使用数据的应用程序都必须同意此方案,并具有相应的逻辑来解决它。但是它运行良好。
我认为在Oracle中也是如此,只需将Varchar替换为Varchar2,将Text替换为CLOB即可。我不敢自称知道varchar的正确大小-这取决于数据,还取决于表中的其他列。
在Oracle 11g-r2及以下版本中没有相应的功能。如果需要,可以迁移到支持该功能的其他DMMS。