【问题标题】:VARCHAR(MAX) versus VARCHAR(n) in OracleOracle 中的 VARCHAR(MAX) 与 VARCHAR(n)
【发布时间】:2010-12-12 17:18:18
【问题描述】:

类似 question,但适用于 Oracle。

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

【问题讨论】:

    标签: sql oracle plsql types


    【解决方案1】:

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

    • 您失去了对可存储在列中的合理值的约束
    • 某些客户端应用程序将分配 4000 字节的内存来接收来自该列的数据,当(比如说)10 是它所包含的全部内容时。

    【讨论】:

    • 不仅是客户端应用程序,还有 PL/SQL。此外,您还需要考虑将两列连接在一起时会发生什么(例如,格式化信封的地址行)。
    • @Tony Andrews,您能否举例说明什么类型的客户端应用程序可以做到这一点?
    • @CodeFlava 不,我不能
    【解决方案2】:

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

    VARCHAR 根本不应该在Oracle 中使用。

    目前,它是VARCHAR2 的同义词,但将来可能会发生变化,以便区分空字符串和NULL

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

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

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

    【讨论】:

    • 由于 VARCHAR 是 ANSI SQL92 标准而 VARCHAR2 不是,我不同意“根本不应该在 Oracle 中使用 VARCHAR”。和“......但它可能会在未来改变......”语句。
    • @eyazici:来自文档:download.oracle.com/docs/cd/B19306_01/server.102/b14220/… 为避免可能的行为变化,请始终使用VARCHAR2 数据类型来存储可变长度字符串。不同意使用说明书并不是最明智的做法,但当然这是您的选择。如果您想构建一个可能在下次升级时中断的Oracle 应用程序,那么使用VARCHAR 绝对是一种方法。
    【解决方案3】:

    对于初学者来说,Oracle 没有 VARCHAR(MAX) 数据类型

    参考:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-22
      • 2011-02-11
      • 2015-05-12
      • 2017-08-11
      • 2011-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多