【问题标题】:Oracle Data Type for text file?文本文件的Oracle数据类型?
【发布时间】:2011-05-28 14:26:19
【问题描述】:

我需要在 Oracle 中创建一个存储一系列大文本文件的表。查看 Oracle 数据类型后,不清楚我应该使用哪种类型来存储文件。

对文本特定类型(如 VARCHAR2)的限制似乎非常小(32K)。其他类型似乎与文本文件(例如 BFILE)不匹配。

有人对正确使用的类型有意见吗?

【问题讨论】:

  • 32K 仅适用于 PL/SQL。在表或常规 SQL 中,VARCHAR2 最多只能存储 4000 个字节。

标签: sql database oracle database-design types


【解决方案1】:

CLOB 和 BLOB/BFILE 的区别在于 CLOB 被视为文本。也就是说,如果您从数据库中提取 CLOB,它将执行从数据库字符集到客户端字符集的任何必要转换(例如,从 ê 中删除重音符号)。同样,当客户端创建 CLOB 时,可能会发生从客户端字符集到数据库字符集的转换。如果客户端和数据库字符集相同,则不需要或执行任何转换。

NCLOB 与 CLOB 类似,只是转换使用的是 NLS NCHAR 字符集,而不是数据库字符集。

BLOB/BFILE 不受转换规则的约束。

所以通常我会为文本使用 CLOB,但如果有一些校验和/审计跟踪逻辑,我什至不希望有任何字符集转换的可能性,我可能会选择 BLOB/BFILE。我不会考虑使用 LONG 或 LONG RAW。

【讨论】:

    【解决方案2】:

    取决于您使用的 Oracle 版本 CLOB 或 Long

    【讨论】:

    • 不推荐使用 Long 的地方,所以如果可以,请使用 CLOB(除非您的 Oracle 版本非常旧,否则可以使用)。
    【解决方案3】:

    字符数据的 LOB 数据类型是 CLOB 和 NCLOB。 它们可以存储多达 8 TB 的字符数据 (CLOB) 或国家字符集数据 (NCLOB)。

    以后 Oracle 建议您将现有的 LONG RAW 列转换为 LOB 列。 LOB 列受到的限制远少于 LONG 列。此外,LOB 功能在每个版本中都得到了增强,而 LONG RAW 功能在多个版本中都是静态的。

    【讨论】:

      猜你喜欢
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-22
      • 2013-04-16
      • 1970-01-01
      相关资源
      最近更新 更多