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。

使用Rowid

Oracle 数据库在内部使用 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')

相关推荐
m0_613856292 小时前
mysql如何利用事务隔离级别解决特定业务冲突_mysql隔离方案选型
jvm·数据库·python
Adios7942 小时前
VPR:Pitts50K和Norland数据集下载
数据库
东风破1372 小时前
DM用户权限、表、约束等对象的基本操作,SQL日志的开启介绍
数据库·sql·dm达梦数据库
收获不止数据库2 小时前
达梦9发布会归来:AI 时代,我们需要一款什么样的数据库?
数据库·人工智能·ai·语言模型·数据分析
小宇的天下2 小时前
Virtuoso GUI 界面中的关键模块定义
数据库
bqq198610263 小时前
MySQL 5.7 与 MySQL 8.0 的主要区别
数据库·mysql
Elastic 中国社区官方博客3 小时前
Elastic-caveman : 在不损失 Elastic 最佳效果的情况下,将 AI 响应 tokens 减少64%
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·全文检索
互联网推荐官3 小时前
上海软件定制开发全流程拆解:需求分析、技术选型与交付管理的工程实践
大数据·数据库·需求分析
专注API从业者4 小时前
Open Claw 京东商品监控选品实战:一键抓取、实时监控、高效选品
java·服务器·数据库
大迪deblog4 小时前
系统架构师-数据库-数据库设计
数据库·oracle·系统架构