Oracle 中 varchar(max) 的等价物是啥?

Posted

技术标签:

【中文标题】Oracle 中 varchar(max) 的等价物是啥?【英文标题】:What is the equivalent of varchar(max) in Oracle?Oracle 中 varchar(max) 的等价物是什么? 【发布时间】:2010-09-29 17:06:15 【问题描述】:

什么是 varchar(max) 在 Oracle 中的等价物?

CLOB?

【问题讨论】:

告诉我 varchar(max) 是什么意思,我会给你 Oracle 的等价物。我怀疑它是 CLOB。 VARCHAR(MAX) 是一个可变长度的字符字段,可以是(我认为)2GB。与 TEXT(与 CLOB 相同)不同,VARCHAR 函数对其起作用。 文本?在甲骨文?啊,也许是同义词。使用 CLOB,不要使用 TEXT @Mark -- 抱歉,SQL Server 中的 TEXT 与 Oracle 中的 CLOB 是一样的。 【参考方案1】:

Varchars 在 Oracle 中被限制为 4000 个字符。除此之外,您必须使用 LONG 或 CLOB。首选 CLOB。 LONG 是较旧的等价物。

来自this Oracle documentation:

LOB 与 LONG 和 LONG RAW

LOB 不同于旧的 LONG 和 LONG RAW 数据类型。

LOB 的最大大小为 4 GB,而 LONG 为 2 GB 和 LONG RAW。 您可以在 LOB 上使用随机和顺序访问方法;你 只能使用顺序访问方法 在 LONG 和 LONG RAW 上。 LOB(NCLOB 除外)可以是对象类型的属性,您可以 定义。 表可以有多个 LOB 列,但只能有一个 LONG 或 LONG RAW 列。

现有 LONG 和 LONG 的迁移 建议使用 LOB 的原始属性 通过甲骨文。 Oracle 计划终止支持 未来的 LONG 和 LONG RAW 发布。请参阅 Oracle8 迁移 有关迁移的更多信息。

【讨论】:

多头和 CLOBS 是邪恶的。 varchar 的大多数函数都不能与它们一起使用,它们也不打算使用。 是的,但是如果你想用 Oracle 超过 4000 个字符,你就别无选择了。 在以后的版本中,更多的 VARCHAR 函数(例如 substr)与 CLOB 一起使用。不是全部,当然,但你通常用 MB 长度的字符串做不同的事情,而不是用几十个字符做的事情。 您通常可以使用 DBMS_LOB 中的函数来做您想做的事情。鉴于我们现在拥有的硬件类型,我同意 4k 对 varchar2 来说太短了。 准确来说,Varchars 被限制在 4000 个 bytes,不超过 4000 个 characters,但在存储多字节字符数据时可能会更少.见Oracle Documentation on Data Types【参考方案2】:

据我了解,VARCHAR(MAX) 数据类型是 SQL Server 2005 特定的指定文本字段的方式,该字段可以很小(SQL Server 中最多 8000 个字符)或 em> 大(在 SQL Server 中高达 2GB)。当内容从小范围增长到大范围时,数据库在幕后处理存储的变化。

Oracle 中没有等价物。

您要么在 VARCHAR2 中有少量文本 - 在 pl/sql 中最多 32767 个字节,在 SQL 中最多 4000 个字节(即在表定义中) - 或者您有可能非常大的文本在 CLOB(这是一个专门的 BLOB)中。

【讨论】:

【参考方案3】:

在 PL/SQL 中,VARCHAR2 最多可以有 32767 个字节。对于 SQL,限制为 4000 个字节(如果您使用多字节字符集,则可能少于 4000 个字符)。

【讨论】:

这不适用于 VARCHAR(MAX) 列。 @Dave -- 我认为 igor 的回答是针对 Oracle 的。【参考方案4】:

AFAIK,没有等价物。您在 ORACLE 中获得的最接近的是 CLOB,它具有与 SQL Server 在“糟糕的过去”中的 TEXT 相同的限制。

【讨论】:

您无法使用 TEXT 执行大多数使用 VARCHAR(MAX) 可以执行的字符串操作功能,例如在字符串中查找单个字符、模式匹配等。使用标准 SQL 函数.【参考方案5】:

我过去使用的一种方法(MS SQL,在 Varchar(max) 之前):

在表格中放置两列,一列较小的 Varchar(例如 255),另一列是 Text。然后构建您的应用程序,以便它将 Varchar 列用于小数据,将 Text 留空。如果数据大于 Varchar,则将其保留为 null 并将其存储在 Text 中。这样,小数据就不会在服务器上占据自己的页面。这里的权衡是所有使用数据的应用程序都必须同意这个方案,并且有逻辑来解释它。但效果很好。

我认为在 Oracle 中也是如此,只需将 Varchar2 替换为 Varchar,将 CLOB 替换为 Text。我不会假装知道 varchar 的正确大小应该是多少——这取决于数据,也取决于表中的其他列。

【讨论】:

当你不能使用 varchar(max) 或 nvarchar(max) 我相信在 SQL Server 中有两列的更简洁的解决方案是使用“行中的文本”表选项。您可以为可存储在数据行中的 text、ntext 和 image 字符串的长度指定 24 到 7,000 个字节的最大限制。请参阅 sp_tableoption 的帮助。例如EXEC sp_tableoption N'MyTable', 'text in row', '1000'【参考方案6】:

在 11g-r2 之前的 Oracle 中没有等效项。 如果您需要它,请迁移到另一个支持它的 DMMS。

【讨论】:

【参考方案7】:

Oracle 11g 网关将 Varchar(Max) 转换为 LONG 不是很方便,并且给我们将 SQL Server 数据加载到 Oracle 中造成了重大问题。

查看以下网址了解更多详情:- http://docs.oracle.com/cd/B28359_01/gateways.111/b31049/apa.htm

【讨论】:

以上是关于Oracle 中 varchar(max) 的等价物是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 12c 中 varchar2 的扩展长度

Oracle数据库—— 表

Oracle批量修改字段类型varchar2(2000)转clob

Oracle批量修改字段类型varchar2(2000)转clob

Oracle批量修改字段类型varchar2(2000)转clob

Varchar(255) 到 Varchar(MAX)