当前位置: 首页 > news >正文

Oracle 常用数据类型:数值类型、字符类型、日期时间、大对象、特殊类型(ROWID、XML、JSON)附:和 MySql对比,Oracle 特有的关键字或方法

Oracle提供了丰富的数据类型,主要包括:

  1. 数值类型:NUMBER为主,支持任意精度数值,FLOAT用于科学计算
  2. 字符类型:VARCHAR2最常用,CHAR用于定长,CLOB处理大文本
  3. 日期时间:DATE(最常用)、TIMESTAMP(高精度)、带时区类型
  4. 大对象:BLOB(二进制)、CLOB(文本)、BFILE(外部文件)
  5. 特殊类型:ROWID、XML、JSON等

使用建议:

  • 常规文本用VARCHAR2
  • 数值用NUMBER
  • 日期用DATE
  • 大文本用CLOB
  • 二进制数据用BLOB

Oracle的NUMBER类型是其特色,统一处理整数和小数,与其他数据库的DECIMAL/NUMERIC类似但实现方式不同。


Oracle 中的常用数据类型


以下是Oracle 常用数据类型的完整总结表格,按使用频率和场景分类:

一、数值类型

数据类型语法示例取值范围 / 说明使用场景
NUMBERNUMBER最大38位精度,可存任意整数/小数默认数值类型,通用
NUMBER(p)NUMBER(5)整数,范围 -99999~99999年龄、数量、编号
NUMBER(p,s)NUMBER(7,2)整数位 7-2=5 位,小数位 2 位金额、单价、汇率
FLOATFLOAT浮点数,精度有限(二进制存储)科学计算(不推荐金融)

💡开发建议:除非特殊需求,否则直接用NUMBER即可。


二、字符类型(最常用)

数据类型语法最大长度特点使用场景
VARCHAR2(n)VARCHAR2(100)4000 字节变长存储,节省空间默认字符串类型,90%场景用它
CHAR(n)CHAR(10)2000 字节定长存储,会补空格固定长度代码(如 '男'/'女')
CLOBCLOB4GB大文本对象文章、日志、JSON 字符串
LONGLONG2GB旧类型,功能受限不推荐,用 CLOB 代替

⚠️注意VARCHAR2是 Oracle 特有,标准 SQL 中叫VARCHAR,但功能类似。


三、日期时间类型

数据类型存储精度格式示例常用函数使用场景
DATE精确到秒'2026-04-25 14:30:00'SYSDATETO_DATE默认日期类型,90%场景
TIMESTAMP精确到小数秒(最多9位)'2026-04-25 14:30:00.123456'SYSTIMESTAMP需要毫秒级精度
TIMESTAMP WITH TIME ZONE带时区'2026-04-25 14:30:00 +08:00'FROM_TZ跨时区系统
INTERVAL YEAR TO MONTH年月间隔INTERVAL '2-3' YEAR TO MONTHNUMTOYMINTERVAL年龄计算、账期
INTERVAL DAY TO SECOND天时分秒间隔INTERVAL '5 02:30:00' DAY TO SECONDNUMTODSINTERVAL任务耗时、超时计算

四、大对象及二进制类型

数据类型最大长度特点使用场景
BLOB4GB二进制大对象图片、PDF、视频、文件
CLOB4GB字符大对象长文本、XML、JSON
BFILE无限制文件指针,存储在 OS 文件系统超大文件引用(不常用)
RAW(n)2000 字节定长二进制加密数据、哈希值
LONG RAW2GB旧类型不推荐,用 BLOB 代替

五、其他特殊类型

数据类型说明使用场景
ROWID伪列,物理行地址(18位字符串)快速定位行、去重
UROWID逻辑行地址,支持不同表索引组织表
XMLTYPEXML 数据类型存储和查询 XML 文档
JSONJSON 数据类型(12c+)存储和查询 JSON 文档
BOOLEAN布尔类型(23c 才支持)早期版本不支持,用 CHAR(1) 替代

六、快速选型指南(新手必看)

业务需求推荐类型示例
姓名、地址、描述VARCHAR2(长度)VARCHAR2(50)
固定代码(性别、状态)CHAR(长度)CHAR(1)
年龄、数量、排名NUMBER(5)NUMBER(3)
金额、单价NUMBER(10,2)NUMBER(8,2)
创建时间、生日DATEDATE
文章内容、日志CLOBCLOB
图片、附件BLOBBLOB

七、注意事项

  1. VARCHAR2最大 4000 字节(12c 后可扩展到 32767 字节,需开启扩展)

  2. CHAR会浪费空间,定长补充空格,查询时需TRIM()

  3. LONG已废弃,新表不要用,用CLOB代替

  4. NUMBER不带参数最灵活,但会占用更多存储空间

  5. DATE包含时间,不要误以为只有日期


NUMBER 数据类型也是Oracle独有的吗?


不是完全独有的,但Oracle 的NUMBER类型确实非常有特色,与其他数据库有明显差异。以下是详细对比:

一、Oracle 的 NUMBER 类型特点

sql

-- Oracle 语法 NUMBER -- 任意精度小数(最大38位) NUMBER(4) -- 整数,范围 -9999~9999 NUMBER(7,3) -- 小数,整数4位,小数3位

核心特性:

  • 可存储任意精度的数值(整数/小数/科学计数法)

  • 最大精度38位

  • 是 Oracle 的默认数值类型


二、与其他数据库对比

数据库对应类型主要差异
OracleNUMBER(p,s)统一类型,支持整数/小数,最大38位精度
MySQLINT/DECIMAL(p,s)/NUMERIC需区分整数(INT/BIGINT)和小数(DECIMAL),DECIMAL最大65位精度
PostgreSQLNUMERIC(p,s)/DECIMAL类似Oracle,但用NUMERIC表示精确小数
SQL ServerDECIMAL(p,s)/NUMERIC区分INT系列和DECIMAL,不支持统一的NUMBER
SQLiteINTEGER/REAL/NUMERIC动态类型,建议用INTEGERREAL

三、具体差异示例

1. MySQL 需要区分类型

sql

-- Oracle:统一使用 NUMBER CREATE TABLE t ( id NUMBER(4), -- 整数 price NUMBER(7,3) -- 小数 ); -- MySQL:需明确指定 CREATE TABLE t ( id INT, -- 整数用INT price DECIMAL(7,3) -- 小数用DECIMAL );

2. 精度差异

sql

-- Oracle:最大38位 NUMBER(38,10) -- 整数28位,小数10位 -- MySQL:最大65位 DECIMAL(65,10) -- 整数55位,小数10位

3. 无精度声明时的差异

sql

-- Oracle:NUMBER 不指定精度 = 最大38位小数(灵活) price NUMBER -- 可存任意小数位数 -- MySQL:DECIMAL 不指定精度 = DECIMAL(10,0) price DECIMAL -- 实际是整数(10位)

四、总结

维度结论
是否Oracle独有?❌ 不是独有,其他数据库有对应类型
特色在哪?✅ 统一用NUMBER表示数值,不需要区分整数/小数
最接近的对应MySQL/PostgreSQL 的DECIMAL/NUMERIC
开发建议跨数据库时使用DECIMALNUMERIC更通用

一句话记忆:
NUMBER是 Oracle 的风格特色(统一类型),但不是语法专利,其他数据库用DECIMAL/NUMERIC实现相同功能。


和MySql对比,Oracle特有的关键字或方法


以下为您整理的Oracle 特有(或与 MySQL 差异较大)的关键字与方法对比表,便于快速区分。

分类Oracle 特有说明 / 用法MySQL 对应 / 备注
伪列ROWNUM限制返回行数,如WHERE ROWNUM <= 5(在排序前生效)LIMIT(排序后生效)
ROWID物理行地址,可最快定位一行,但可能变化无直接对应
字符串||字符串连接符,如'A'||'B''AB'CONCAT()+(需设置模式)
NVL(expr, 替换值)空值替换(通用)IFNULL()COALESCE()
NVL2(expr, 非空值, 空值)非空/空值分别返回不同结果IF(expr IS NULL, 空值, 非空值)
日期SYSDATE当前日期时间(精确到秒)NOW()CURRENT_TIMESTAMP
TO_DATE('字符串', 格式)字符串转日期,如TO_DATE('20260104','YYYYMMDD')STR_TO_DATE()
MONTHS_BETWEEN计算两个日期间隔月份数TIMESTAMPDIFF(MONTH, ...)
ADD_MONTHS日期加减月份DATE_ADD(..., INTERVAL n MONTH)
事务COMMIT/ROLLBACK需手动提交/回滚(默认不自动提交)InnoDB 也支持,但默认自动提交每句 SQL
表操作TRUNCATE清空表,不能回滚,重置高水位线同样有,但部分引擎行为不同
MODIFY 列名 类型修改列数据类型MODIFY COLUMNCHANGE COLUMN
RENAME COLUMN 旧 TO 新重命名列CHANGE COLUMN 旧 新 类型
分页嵌套子查询 +ROWNUM需先排序再套子查询直接用LIMIT m, nLIMIT n OFFSET m
多表删除子查询方式不支持DELETE t1,t2 FROM ...语法可直接DELETE t1,t2 FROM ... JOIN ...
递归查询CONNECT BY树形结构查询(如组织架构)WITH RECURSIVE ...
排名函数RANK()/DENSE_RANK()/ROW_NUMBER()窗口函数(8i 起逐步支持)MySQL 8.0+ 同样支持

💡注意:随着 Oracle 和 MySQL 版本迭代,部分差异在缩小(如 MySQL 8.0+ 已支持RANK()、递归查询等)。上表以开发中最常见、仍需注意的差异为主。

http://www.jsqmd.com/news/701643/

相关文章:

  • 2026江诗丹顿名表维修全解析:欧米茄名表回收/江诗丹顿名表回收/浪琴名表回收/浪琴名表维修/百达翡丽名表回收/选择指南 - 优质品牌商家
  • 为什么你的低代码应用在VSCode里“看不见”变量?深度解析Webview沙箱隔离、eval上下文丢失与Source Map v3兼容性危机
  • Real Anime Z开源价值:可商用权重+本地运行保障数据隐私安全
  • Qwen3-ForcedAligner-0.6B模型架构解析:非自回归LLM的创新设计
  • NCHW与NHWC图像存储格式的性能对比与优化策略
  • 2026TOP5乐山麻辣烫店:乐山麻辣烫店推荐、乐山麻辣烫店电话、乐山麻辣烫推荐、老兵麻辣烫地址、老兵麻辣烫电话选择指南 - 优质品牌商家
  • SQL查询优化:NOT EXISTS与LEFT JOIN性能对比
  • Kandinsky-5.0-I2V-Lite-5s作品赏析:基于Matlab图像处理后的风格化视频生成
  • 浏览器工作原理从输入URL到页面渲染
  • Kotlin AI Agent框架Koog实战:类型安全、协程与生产级特性解析
  • SQL性能飙升秘籍:从索引到调优的实战全解析
  • WebArena:构建高保真互联网沙盒,系统评估AI智能体网页交互能力
  • 2026年CMA检测全解析:cma甲醛检测、cma资质检测机构、主体结构检测、公共卫生检测、四川CMA检测机构选择指南 - 优质品牌商家
  • 麦橘超然Flux控制台实战:如何生成赛博朋克风格的高清图片
  • real-anime-z镜像免配置:模型路径预置+WebUI自动加载checkpoint机制
  • 【线性代数笔记】伴随矩阵 A* 的性质汇总与还原原矩阵 A 的核心技巧
  • 机器学习模型持久化:pickle与joblib实战指南
  • 嵌入式+PLC+微服务联合调试实战(VSCode工业调试全栈手册)
  • GLM-4-9B-Chat-1M提示工程指南:高效Prompt设计技巧
  • 终极指南:如何用FakeLocation实现安卓应用级位置模拟
  • 基于大语言模型与智能体技术构建PPT自动生成系统
  • scikit-learn Pipeline:构建自动化机器学习工作流
  • Z-Image-LM测试台参数详解:CFG Scale/迭代步数/生成质量平衡点实测分析
  • 建议收藏 | 构建长期运行 AI Agent 的 5 种核心设计模式!
  • AI算子上线即崩?揭秘CUDA 13生产集群中93%隐性PTX兼容性故障的3层诊断法(含cuobjdump逆向校验脚本)
  • VSCode量子高亮性能暴增400%?实测对比12种量子语言片段渲染耗时,这份2026专属settings.json配置表已被MIT Quantum Lab内部引用
  • 如何用BetterNCM插件管理器彻底改造你的网易云音乐体验
  • 基于Flutter与端到端加密的私有笔记应用yn部署与配置指南
  • Zotero文献去重插件:3步告别重复文献,让学术研究更高效
  • 5个技巧让你的开源项目管理工具像Minecraft一样高效协作