Oracle数据类型的简单学习之一
Oracle数据类型的简单学习之一
背景
因为信创安可替代的发展
有很多项目提到了数据库切换到国产数据库的要求.
一般情况是要求从Oracle/SQLServer 迁移到国产的:
达梦/瀚高/人大金仓/南大通用 等数据库.
但是因为Oracle作为数据库领域 No.1的存在
他对SQL的规范标准支持的并不是很好.
所以里面会有很多数据库数据类型映射的问题.
自己对数据库学习很浅. 希望能够慢慢学习逐渐提高.
Oracle的自建数据类型

字符类型
前期总结过很多 字符数据类型
主要是 varchar nvarchar 相关的内容.
区别是:
varchar 存储的是 安装时指定的数据库字符集.
nvarchar 存储的是 安装时指定的国家字符集.
需要说明的是 国家字符集一般是AL16UTF16
这个字符集只能用于 国家字符集, 不能用于数据库字符集
这里需要补充的是, 虽然 varchar 一般说法是按照 字节来存储. nvarchar 安装字符来存储
但是实际上也是不对的.
他主要是受到: NLS_LENGTH_SEMANTICS 参数的默认限制
也可以创建表时, 通过 varchar(lenth char/byte)的方式显示来指定.
需要注意, 这个参数默认是 byte. 建库语句默认也是byte.
修改参数后建议重启数据库, 并且这个参数是PDB可以隔离的.
参数是 session/system 级别都可以进行设置的.
字符类型

数值类型
需要说明 Oracle其实底层存储只有 number 和 float BINARY_FLOAT BINARY_DOUBLE 四种数据类型
但是ISO的SQL规范里面 int double float 等等多种数据类型, 其实Oracle里面一概没有实现.
并且decimal 其实也仅是 number 的一个别名, 据说只是为了从DB2里面进行转换才用的.
这里面有一个非常大的误区. Oracle的number 虽然是 38 的最大precision
但是实际上他可以最多存储126位的数字, 当然 此时的精度无法保证.
最大可以存储 e+125 的数值.
里面的换算关系很复杂, 可以通过测试来进行验证.
但是定义了精度和scale的话, 就跟decimal 一样可以保证精度.
测试1
drop table zhaobsh ;
create table zhaobsh (a decimal ,b number , c decimal(5) , d decimal(19,2) ,
e float ,F decimal(38,2),g number(38,-84) ,h BINARY_FLOAT , i binary_double ) ;
SQL> desc zhaobsh
----------------------------------------- -------- ----------------------------
A NUMBER(38)
B NUMBER
C NUMBER(5)
D NUMBER(19,2)
E FLOAT(126)
F NUMBER(38,2)
G NUMBER(38,-84)
H BINARY_FLOAT
I BINARY_DOUBLE
测试2
insert into zhaobsh(b) values (999999999999999999999999999999999999999949999999999999999999999999999999999999999999999999999999999999999999999999999999999999)
126长度, 这个可以正常保存。
insert into zhaobsh(b) values (999999999999999999999999999999999999999950000000000000000000000000000000000000000000000000000000000000000000000000000000000000)
126长度, 这个保存会报错。
数值类型

布尔类型
需要说明 Oracle没有布尔类型.
布尔类型其实是一个深坑. 他是 SQL2003的标准才添加的.
SQL92标准里面其实是没有 boolean 类型的.
Oracle作为数据库的扛把子, 自己玩的比标准还要深入.
所以他并没有非常良好的按照SQL标准进行开发.
产品一般可以使用 char(1) 后者是 number(1) 进行描述.
但是迁移后的数据, 是需要对照一下的.
这里其实还有业务逻辑, 需要进行处理.
SQL规范的进展-来源参见水印 CSDN
- 需要注意 2023.6.1 SQL2023规范已经发布.
- 这个规范是需要付费的. 没钱的不建议下载.

SQL2003规范
SQL:2003是SQL标准的一个重要版本,于2003年发布。它在SQL:1999的基础上做了一些修订和扩展,引入了一些新的功能和改进,进一步完善了SQL语言的功能和能力。
以下是SQL:2003标准的一些主要特征和改进:
更多的窗口函数:SQL:2003扩展了对窗口函数的支持,使得窗口函数的功能更加强大和灵活。
序列和自增字段:引入了序列(Sequence)和自增字段(Identity Columns)的概念,为数据库中生成唯一标识符提供了更方便和标准的方式。
更强大的数据类型支持:SQL:2003引入了更多种类的数据类型,包括布尔类型(BOOLEAN)、日期和时间处理的增强类型等,增强了数据建模的灵活性。
更多的XML支持:SQL:2003进一步加强了对XML数据类型和XML查询语言的支持,允许更方便地操作和处理XML数据。
对标量子查询的扩展:引入了对标量子查询(Scalar Subqueries)的支持,允许在SELECT列表中使用子查询。
更多的标准化函数和操作符:SQL:2003引入了更多的标准函数和操作符,增强了SQL语言的表达能力。
更多的数据完整性约束和管理:加强了对数据完整性约束的支持和管理,使得数据库更容易受到保护和控制。
对外部数据集成的改进:SQL:2003增强了对外部数据集成的能力,使得数据库系统更容易与外部数据进行集成和交互。
Oracle数据类型的简单学习之一的更多相关文章
- oracle表空间简单学习
1.重命名表空间:alter tablespace 原表空间名 rename to 新表空间名ps:(1)system 和sysaux表空间不能重名(2)如果该表空间中任何一个数据出于脱机状态或者表空 ...
- 【2016-11-3】【坚持学习】【Day18】【Oracle 数据类型 与C#映射关系】
大部分类型的对应关系:原文:http://2143892.blog.51cto.com/2133892/499353 序号 Oracle数据类型 .NET类型 GetOracleValue类型 DbT ...
- 简单学习一下ibd数据文件解析
来源:原创投稿 作者:花家舍 简介:数据库技术爱好者. GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 简单学习一下数据文件解析 这是尝试使用Golang语言简单解析My ...
- oracle 数据类型详解---日期型(转载)
oracle 数据类型详解---日期型 oracle数据类型看起来非常简单,但用起来会发现有许多知识点,本文是我对ORACLE日期数据类型的一些整理,都是开发入门资料,与大家分享: 注:由于INTER ...
- mysql 和 Oracle 数据类型对照
MySQL与Oracle两种数据库在工作中,都是用的比较多的数据库,由于MySQL与Oracle在数据类型上有部分差异,在我们迁移数据库时,会遇上一定的麻烦,下面介绍MySQL与Oracle数据库数据 ...
- Vagrant 安装Oracle19c RAC测试环境的简单学习
1. 学习自网站: https://xiaoyu.blog.csdn.net/article/details/103135158 简单学习了下 能够将oracle RAC开起来了 但是 对后期的维护和 ...
- js数据类型很简单,却也不简单
最近脑子里有冒出"多看点书"的想法,但我个人不是很喜欢翻阅纸质书籍,另一方面也是因为我能抽出来看书的时间比较琐碎,所以就干脆用app看电子书了(如果有比较完整的阅读时间,还是建议看 ...
- SQL Server和Oracle数据类型对应关系
在工作中,有时会遇到跨库传输数据的情况,其中 SQL Server 和 Oracle 之间的数据传输是比较常见的情况. 因为 SQL Server 和 Oracle 的数据类型有些差异,这就要求我们在 ...
- Log4j简单学习笔记
log4j结构图: 结构图展现出了log4j的主结构.logger:表示记录器,即数据来源:appender:输出源,即输出方式(如:控制台.文件...)layout:输出布局 Logger机滤器:常 ...
- oracle数据类型
本文转自:http://blog.csdn.net/defonds/article/details/4302695 谢谢原文作者 有道是,磨刀不误砍柴工.多了解一些底层的东西,对于Oracle开发.维 ...
随机推荐
- 性能集成监控系统exporter+Prometheus+Grafana
Prometheus 是一个时序数据库,存数据 exporter是收集器,来收集被监控的数据,想要监控不同的内容,就使用不同的exporter,这个exporter应该放在被测服务器上,再把expor ...
- 深入剖析 Linux Cgroups 子系统:资源精细管理
本章主要演示以下 cgroups 下各个 subsystem 的作用. 根据难易程度,依次演示了 pids .cpu 和 memory 3 个 subsystem 的使用. 注:本文所有操作在 Ubu ...
- 教你如何基于MindSpore进行ChatGLM微调
本文分享自华为云社区<基于MindSpore的ChatGLM微调>,作者: JeffDing . 基于MindSpore的ChatGLM微调 克隆Hugging Face模型 克隆chat ...
- 如何快速准备高质量的AI数据?
摘要:随着AI的快速发展,如何快速准备大量高质量的数据已经成为AI开发过程中一个极具挑战性的问题! 本文分享自华为云社区<如何快速准备高质量的AI数据?>,原文作者:徐波. 一.背景 通常 ...
- 鸿蒙轻内核M核源码分析:中断Hwi
摘要:本文带领大家一起剖析了鸿蒙轻内核的中断模块的源代码,掌握中断相关的概念,中断初始化操作,中断创建.删除,开关中断操作等. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列五 中断Hwi&g ...
- 云图说|数据仓库服务 GaussDB(DWS) 的“千里眼、顺风耳”—数据库智能运维
摘要:数据库智能运维(DMS)是GaussDB(DWS) 为客户数据库快速.稳定运行提供保驾护航的能力,对业务数据库所使用磁盘.网络.OS指标数据,集群运行关键性能指标进行收集.监控.分析.通过综合收 ...
- vue2升级vue3:单文件组件概述 及 defineExpos/expose
像我这种react门徒被迫迁移到vue的,用管了TSX,地vue 单文件组件也不太感冒,但是vue3 单文件组件,造了蛮多api ,还不得去了解下 https://v3.cn.vuejs.org/ap ...
- 如何给网页和代码做HTML加密?
如何给网页和代码做HTML加密? 本篇文章给大家谈谈html混淆加密在线,以及HTML在线加密对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔. 如何给代码加密? 1.源代码加密软件推荐使 ...
- MongoDB 读写分离——SpringBoot读写分离
application.yml data: mongodb: uri: mongodb://127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019/fecg_d ...
- System.out.printf 格式化输出
System.out.printf @Test public void printTest() throws Exception { String str = "安倍晋三已无生命体征!!&q ...