目 录CONTENT

文章目录

Oracle常见字段类型解析介绍

暮渔木鱼
2024-02-14 / 0 评论 / 0 点赞 / 2 阅读 / 0 字 / 正在检测是否收录...

Oracle 数据库提供了多种数据类型,用于存储不同类型的数据。以下是对常见字段类型的详细解析和介绍,涵盖其用途、语法、存储限制及适用场景:


一、字符类型(Character Types)

  1. CHAR(size)

    • 用途:存储定长字符串,不足长度用空格填充。
    • 语法CHAR(size [BYTE | CHAR])
      • size 范围:1 到 2000 字节(默认 BYTE)或字符(若指定 CHAR)。
    • 适用场景:固定长度的字段,如国家代码(如 'CN')、状态标识(如 'Y'/'N')。
    • 注意:存储效率低于变长类型(如 VARCHAR2)。
  2. VARCHAR2(size)

    • 用途:存储可变长度字符串,不填充空格。
    • 语法VARCHAR2(size [BYTE | CHAR])
      • size 范围:1 到 4000 字节(默认 BYTE)或字符(若指定 CHAR)。
      • Oracle 12c+ 支持扩展至 32767 字节(需启用 MAX_STRING_SIZE=EXTENDED)。
    • 适用场景:大多数可变长度的文本字段,如姓名、地址等。
    • 注意:Oracle 推荐使用 VARCHAR2 而非废弃的 VARCHAR
  3. NVARCHAR2(size)

    • 用途:存储 Unicode 变长字符串,支持多语言字符集(如 UTF-8)。
    • 语法NVARCHAR2(size),以字符为单位。
      • size 范围:1 到 4000 字符。
    • 适用场景:需要国际化支持的文本字段。
  4. NCHAR(size)

    • 用途:定长 Unicode 字符串,类似 CHAR 但支持 Unicode。
    • 语法NCHAR(size),以字符为单位。
      • size 范围:1 到 2000 字符。

二、数字类型(Numeric Types)

  1. NUMBER(precision, scale)

    • 用途:存储整数或浮点数,精度灵活。
    • 语法
      • NUMBER:不指定精度,最大范围 ±1e-130 到 ±1e126。
      • NUMBER(p, s)
        • p(精度):总位数(1-38),s(小数位):小数点后位数。
        • 例如:NUMBER(5,2) 可存储 123.45
    • 子类型
      • INTEGERINT:等同于 NUMBER(38)
      • FLOATBINARY_FLOAT:IEEE 754 浮点数,用于科学计算。
    • 适用场景:通用数值存储,如金额、计数器等。
  2. BINARY_FLOAT / BINARY_DOUBLE

    • 用途:存储 IEEE 754 标准浮点数,计算速度快但可能存在精度问题。
    • 范围
      • BINARY_FLOAT:32 位,约 ±3.4e38。
      • BINARY_DOUBLE:64 位,约 ±1.7e308。
    • 适用场景:科学计算、高性能数值处理。

三、日期与时间类型(Date/Time Types)

  1. DATE

    • 用途:存储日期和时间(精确到秒)。
    • 范围:公元前 4712 年 1 月 1 日 到 公元 9999 年 12 月 31 日。
    • 格式:默认显示为 DD-MM-YYYY HH24:MI:SS
    • 适用场景:记录事件时间戳(如订单创建时间)。
  2. TIMESTAMP(precision)

    • 用途:日期和时间,支持小数秒(默认精度 6 位)。
    • 语法TIMESTAMP[(0-9)],例如 TIMESTAMP(3) 精确到毫秒。
    • 适用场景:需要高精度时间记录的场景(如日志、实验数据)。
  3. TIMESTAMP WITH TIME ZONE

    • 用途:包含时区信息的日期时间,便于跨时区数据处理。
    • 示例2023-10-01 12:00:00 +08:00
    • 适用场景:全球化应用的统一时间记录。
  4. TIMESTAMP WITH LOCAL TIME ZONE

    • 用途:存储时区信息,但显示时会自动转换为会话时区。
    • 示例:存储 UTC 时间,会话时区为东八区则显示为 +08:00
  5. INTERVAL YEAR TO MONTH

    • 用途:存储以年和月为单位的时间间隔(如 2 年 6 个月)。
    • 语法INTERVAL YEAR(precision) TO MONTHprecision 为年的最大位数(0-9)。
  6. INTERVAL DAY TO SECOND

    • 用途:存储以天、小时、分钟、秒为单位的时间间隔。
    • 语法INTERVAL DAY(d_precision) TO SECOND(s_precision)

四、大对象类型(LOB Types)

  1. CLOB / NCLOB

    • 用途:存储大量文本数据(如长文章、XML)。
    • 区别
      • CLOB:字符大对象,使用数据库字符集。
      • NCLOB:Unicode 字符大对象。
    • 存储上限:最大 128TB(取决于数据库块大小)。
  2. BLOB

    • 用途:存储二进制数据(如图像、视频、文件)。
    • 语法BLOB,最大存储同 CLOB
  3. BFILE

    • 用途:指向数据库外部文件的指针(文件存储在操作系统)。
    • 注意:需要配置目录对象(DIRECTORY)管理文件路径。

五、二进制类型(Raw Types)

  1. RAW(size)

    • 用途:存储二进制数据(如加密信息、哈希值)。
    • 范围:1 到 2000 字节(Oracle 12c+ 支持扩展至 32767)。
  2. LONG RAW

    • 用途:遗留类型,存储二进制数据,最大 2GB。
    • 注意:Oracle 推荐使用 BLOB 替代。

六、ROWID 与 UROWID

  1. ROWID

    • 用途:唯一标识一行记录的物理地址(如 AAATrqAAFAAAADPAAA)。
    • 注意:实际存储为 10 字节的 Base64 字符串。
  2. UROWID

    • 用途:通用 ROWID,支持逻辑地址(如索引组织表)。

七、其他类型

  1. BOOLEAN

    • 用途:仅 PL/SQL 中支持,存储 TRUE/FALSE/NULL
  2. XMLType

    • 用途:存储 XML 数据,支持 XML 解析和验证。
  3. JSON

    • 用途:Oracle 12c+ 支持原生 JSON 存储(JSON 类型或 VARCHAR2 + IS JSON 约束)。

选择建议

  • 字符数据:优先选择 VARCHAR2(变长节省空间),CHAR 仅用于严格定长场景。
  • 数值数据:通用需求用 NUMBER,高性能计算用 BINARY_FLOAT/BINARY_DOUBLE
  • 日期时间:需要时区用 TIMESTAMP WITH TIME ZONE,高精度用 TIMESTAMP
  • 大对象:文本用 CLOB,二进制用 BLOB,外部文件用 BFILE

通过合理选择数据类型,可以优化存储效率、查询性能及数据一致性。

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区