Oracle 数据库提供了多种数据类型,用于存储不同类型的数据。以下是对常见字段类型的详细解析和介绍,涵盖其用途、语法、存储限制及适用场景:
一、字符类型(Character Types)
-
CHAR(size)
- 用途:存储定长字符串,不足长度用空格填充。
- 语法:
CHAR(size [BYTE | CHAR])size范围:1 到 2000 字节(默认BYTE)或字符(若指定CHAR)。
- 适用场景:固定长度的字段,如国家代码(如 'CN')、状态标识(如 'Y'/'N')。
- 注意:存储效率低于变长类型(如
VARCHAR2)。
-
VARCHAR2(size)
- 用途:存储可变长度字符串,不填充空格。
- 语法:
VARCHAR2(size [BYTE | CHAR])size范围:1 到 4000 字节(默认BYTE)或字符(若指定CHAR)。- Oracle 12c+ 支持扩展至 32767 字节(需启用
MAX_STRING_SIZE=EXTENDED)。
- 适用场景:大多数可变长度的文本字段,如姓名、地址等。
- 注意:Oracle 推荐使用
VARCHAR2而非废弃的VARCHAR。
-
NVARCHAR2(size)
- 用途:存储 Unicode 变长字符串,支持多语言字符集(如 UTF-8)。
- 语法:
NVARCHAR2(size),以字符为单位。size范围:1 到 4000 字符。
- 适用场景:需要国际化支持的文本字段。
-
NCHAR(size)
- 用途:定长 Unicode 字符串,类似
CHAR但支持 Unicode。 - 语法:
NCHAR(size),以字符为单位。size范围:1 到 2000 字符。
- 用途:定长 Unicode 字符串,类似
二、数字类型(Numeric Types)
-
NUMBER(precision, scale)
- 用途:存储整数或浮点数,精度灵活。
- 语法:
NUMBER:不指定精度,最大范围 ±1e-130 到 ±1e126。NUMBER(p, s):p(精度):总位数(1-38),s(小数位):小数点后位数。- 例如:
NUMBER(5,2)可存储123.45。
- 子类型:
INTEGER、INT:等同于NUMBER(38)。FLOAT、BINARY_FLOAT:IEEE 754 浮点数,用于科学计算。
- 适用场景:通用数值存储,如金额、计数器等。
-
BINARY_FLOAT / BINARY_DOUBLE
- 用途:存储 IEEE 754 标准浮点数,计算速度快但可能存在精度问题。
- 范围:
BINARY_FLOAT:32 位,约 ±3.4e38。BINARY_DOUBLE:64 位,约 ±1.7e308。
- 适用场景:科学计算、高性能数值处理。
三、日期与时间类型(Date/Time Types)
-
DATE
- 用途:存储日期和时间(精确到秒)。
- 范围:公元前 4712 年 1 月 1 日 到 公元 9999 年 12 月 31 日。
- 格式:默认显示为
DD-MM-YYYY HH24:MI:SS。 - 适用场景:记录事件时间戳(如订单创建时间)。
-
TIMESTAMP(precision)
- 用途:日期和时间,支持小数秒(默认精度 6 位)。
- 语法:
TIMESTAMP[(0-9)],例如TIMESTAMP(3)精确到毫秒。 - 适用场景:需要高精度时间记录的场景(如日志、实验数据)。
-
TIMESTAMP WITH TIME ZONE
- 用途:包含时区信息的日期时间,便于跨时区数据处理。
- 示例:
2023-10-01 12:00:00 +08:00。 - 适用场景:全球化应用的统一时间记录。
-
TIMESTAMP WITH LOCAL TIME ZONE
- 用途:存储时区信息,但显示时会自动转换为会话时区。
- 示例:存储 UTC 时间,会话时区为东八区则显示为
+08:00。
-
INTERVAL YEAR TO MONTH
- 用途:存储以年和月为单位的时间间隔(如 2 年 6 个月)。
- 语法:
INTERVAL YEAR(precision) TO MONTH,precision为年的最大位数(0-9)。
-
INTERVAL DAY TO SECOND
- 用途:存储以天、小时、分钟、秒为单位的时间间隔。
- 语法:
INTERVAL DAY(d_precision) TO SECOND(s_precision)。
四、大对象类型(LOB Types)
-
CLOB / NCLOB
- 用途:存储大量文本数据(如长文章、XML)。
- 区别:
CLOB:字符大对象,使用数据库字符集。NCLOB:Unicode 字符大对象。
- 存储上限:最大 128TB(取决于数据库块大小)。
-
BLOB
- 用途:存储二进制数据(如图像、视频、文件)。
- 语法:
BLOB,最大存储同CLOB。
-
BFILE
- 用途:指向数据库外部文件的指针(文件存储在操作系统)。
- 注意:需要配置目录对象(
DIRECTORY)管理文件路径。
五、二进制类型(Raw Types)
-
RAW(size)
- 用途:存储二进制数据(如加密信息、哈希值)。
- 范围:1 到 2000 字节(Oracle 12c+ 支持扩展至 32767)。
-
LONG RAW
- 用途:遗留类型,存储二进制数据,最大 2GB。
- 注意:Oracle 推荐使用
BLOB替代。
六、ROWID 与 UROWID
-
ROWID
- 用途:唯一标识一行记录的物理地址(如
AAATrqAAFAAAADPAAA)。 - 注意:实际存储为 10 字节的 Base64 字符串。
- 用途:唯一标识一行记录的物理地址(如
-
UROWID
- 用途:通用 ROWID,支持逻辑地址(如索引组织表)。
七、其他类型
-
BOOLEAN
- 用途:仅 PL/SQL 中支持,存储
TRUE/FALSE/NULL。
- 用途:仅 PL/SQL 中支持,存储
-
XMLType
- 用途:存储 XML 数据,支持 XML 解析和验证。
-
JSON
- 用途:Oracle 12c+ 支持原生 JSON 存储(
JSON类型或VARCHAR2+IS JSON约束)。
- 用途:Oracle 12c+ 支持原生 JSON 存储(
选择建议
- 字符数据:优先选择
VARCHAR2(变长节省空间),CHAR仅用于严格定长场景。 - 数值数据:通用需求用
NUMBER,高性能计算用BINARY_FLOAT/BINARY_DOUBLE。 - 日期时间:需要时区用
TIMESTAMP WITH TIME ZONE,高精度用TIMESTAMP。 - 大对象:文本用
CLOB,二进制用BLOB,外部文件用BFILE。
通过合理选择数据类型,可以优化存储效率、查询性能及数据一致性。
评论区