Oracle数据类型概述(一)

张开发
2026/4/11 8:09:54 15 分钟阅读

分享文章

Oracle数据类型概述(一)
Oracle数据类型概述一概述表中的每个列都有一种数据类型这与特定的存储格式、限制、和有效的值范围相关联。在创建表时必须为每个列指定数据类型该列中插入的每个值都假定为该列的数据类型。Oracle 数据库最常用的数据类型字符数据类型数字数据类型日期数据类型ROWID 数据类型备注还有其他几种重要的内建类型包括 RAW、大对象 (LOB)、 和集合。PL/SQL 具有用于常量和变量的数据类型包括布尔、引用类型、复合类型 记录、和用户定义类型。后续文章中补充这些类型字符数据类型字符数据类型存储在字符串中的字符 字母或数字 数据。Oracle数据库中最常用的字符数据类型是 VARCHAR2它是用于存储字符数据的最有效的选项。与字符编码模式相对应的字节值一般称为字符集。数据库字符集是在数据库创建时建立的。字符集的例子有 7 位 ASCII 码、 EBCDIC码、和 Unicode utf-8、GBK等。字符数据类型的长度语义可以以字节或字符为单位。字节语义将字符串视为一个字节序列。 这是字符数据类型的默认值。字符语义将字符串视为字符序列。 一个字符在技术上是数据库字符集的编码点。VARCHAR2 和 CHAR 数据类型VARCHAR2 数据类型存储变长字符文本。字符文本包括在单引号中以便数据库可以将它们与模式对象名称区分开来。当创建一个有 VARCHAR2 列的表时指定该列的最大字符串长度。CHAR 存储固定长度的字符串。创建一个有CHAR 列的表时需要为该列指定一个长度。默认值是 1 个字节。数据库使用空格填充到指定的长度的值。Oracle 数据库将使用非填充比较语义来比较 VARCHAR2 值而使用空白填充比较语义来比较 CHAR 值。NCHAR 和 NVARCHAR2 数据类型NVARCHAR2 和 NCHAR 数据类型存储 Unicode 字符数据。Unicode 是一种通用的编码字符集可以将任何语言的信息存储在一种字符集中。NCHAR 存储对应于国家字符集的固定长度字符串而 NVARCHAR2 存储可变长度的字符串。创建数据库时指定国家字符集。NCHAR 和 NVARCHAR2 数据类型的字符集必须是 AL16UTF16 或 UTF8。这两种字符集都使用 Unicode 编码。创建一个有 NCHAR 或 NVARCHAR2 列的表时其最大大小始终是字符长度语义。对于 NCHAR 或 NVARCHAR2字符长度语义是默认的也是唯一的长度语义。数字数据类型Oracle 数据库的数字数据类型存储固定和浮点数字、零、或无穷。Oracle 数据库以变长格式存储数字数据。用科学计数法存储值其中一个字节用于存储指数。数据库使用最多 20 个字节存储尾数即浮点数的有效位数部分。Oracle 数据库不会存储前导零和结尾零。NUMBER 数据类型NUMBER 数据类型存储固定和浮点数字。NUMBER 使用十进制精度。数据库可以存储几乎任何规模的数字。此数据保证在运行 Oracle 数据库的不同操作系统之间可移植。大多数情况下存储数值数据时推荐使用 NUMBER 数据类型。按 NUMBER(p,s)的形式定义定点数p 和 s 有以下特征**精度**精度指定数字的总长度。如果不指定精度则列按应用程序提供的数据存储值不作任何舍入。**小数位数**小数位数指从十进制的小数点到最小有效数字的位数。正小数位数从小数点向右计数直至最小有效位。负小数位数从小数点向左计数直至但不包括最小有效数字。如果指定了精度但没有指定小数位数如 NUMBER(6)那么小数位数为 0。NUMBER(8,2)类型精度为 8而小数位数为2。浮点数Oracle 数据库为浮点数提供了两种互斥的数值数据类型 BINARY_FLOAT 和 BINARY_DOUBLE。这两种类型支持所有 NUMBER 数据类型提供的基本功能。BINARY_FLOAT 和BINARY_DOUBLE 使用二进制精度可以使算术计算更快并且通常可以降低存储需求。BINARY_FLOAT 和 BINARY_DOUBLE 是近似数字数据类型。它们存储十进制的值的近似表示而不是精确的表示形式。例如值 0.1 不能用BINARY_DOUBLE 或 BINARY_FLOAT 完全精确地表示。他们经常用于科学计算。其行为类似于 Java 或 XMLSchema 中的 FLOAT 和 DOUBLE 数据类型。日期数据类型日期数据类型包括 DATE 和 TIMESTAMP。Oracle 数据库为时间戳提供全面的时区支持。DATE 数据类型DATE 数据类型存储日期和时间。尽管日期时间可以用字符或数字数据类型表示DATE 具有特殊的相关属性。数据库在内部将日期存储为数字。日期被存储为固定长度的域共 7 个字节分别对应世纪、 年、 月、 日、 小时、分、和秒。Oracle 数据库以 24 小时制格式存储时间 — — HH:MI:SS。如果不输入的任何时间部分那么默认情况下日期字段中的时间是凌晨 00: 00: 00如果只输入了时间则日期部分默认为当月的第一天。TIMESTAMP 数据类型TIMESTAMP 数据类型是日期数据类型的扩展。除了存储在 DATE 数据类型的信息它同时还存储秒的小数部分。TIMESTAMP 数据类型对于存储精确时间的值很有用比如那些必须跟踪事件顺序的应用程序。DATETIME 数据类型 TIMESTAMP WITH TIME ZONE 和TIMESTAMP WITH LOCAL TIME ZONE 能感知时区。当用户中选择数据时其值会被调整以适配用户会话的时区。此数据类型可用于收集和评估各地理区域的日期信息。Rowid数据类型存储在数据库中的每一行都有一个地址。Oracle 数据库使用 ROWID 数据类型存储在数据库中的每一行的地址 (rowid)。Rowids 分为以下几类物理 rowids 存储堆组织表、 表簇、表分区、和索引分区中的行地址。逻辑 rowids 存储索引组织表中的行地址指向主键行位置。外部 rowids 是外来表如通过网关访问的 DB2 表中的标识符。他们不是标准的 Oralce 数据库 rowids。有一种数据类型称为通用 rowid 或 UROWID支持各种 rowids。使用RowidOracle 数据库在内部使用 rowids 用于构造索引最常见的 B 树索引包含一个被划分成多个键范围的排序列表。每个键都与一个指向关联的行地址的rowid 相关联用于快速访问。使用rowids 的几个重要功能Rowids 是访问特定行的最快方式。Rowids 提供了查看表的组织方式的能力。Rowids 是给定表中的行的唯一标识符。可以创建带 ROWID 数据类型列的表。例如您可以定义一个异常表其中一列为 ROWID 数据类型以存储违反了完整性约束的行 rowids。使用ROWID 数据类型定义的列像其他表中的列一样 其值可以更新等等。Rowid伪列Oracle 数据库中的每个表都有一个名为 ROWID 的 伪列。伪列类似于表列但实际上并不存储在表中。可以从伪列中选择数据但不能插入、更新、或删除它们的值。伪列也类似于不带参数的 SQL 函数。不带参数的函数对于结果集中的每一行通常返回相同的值而伪列通常为每个行返回不同的值。ROWID 伪列的值是表示的每个行的地址的字符串。这些字符串具有的数据类型 ROWID。在执行 SELECT 或 DESCRIBE 列出表的结构时此伪列并不显示它也不占用空间。但是每个行的 rowid 可以通过使用保留字ROWID 作为列名的 SQL 查询来检索。格式模型与数据类型格式模型是一个字符文本用来描述存储在一个字符串中的日期时间或数值数据的格式。格式模式不会更改数据库中的值的内部表示形式。当将一个字符串转换成日期或数字时格式模型决定了数据库如何解释字符串。在 SQL 中你可以使用格式模型作为 TO_CHAR 和 TO_DATE 函数的参数来格式化将从数据库中返回的一个值或将存储到数据库中的一个值。例如to_char(salary, ‘$99,990.99’)to_char(sysdate,‘yyyymmdd hh24:mi:ss’)to_date(‘2026-04-07 21:22:20’,‘yyyymmdd hh24:mi:ss’)

更多文章