【发布时间】:2010-12-26 19:32:19
【问题描述】:
Oracle 背景的一些人使用 DECIMAL(31,0) 表示整数的原因是什么。在 MySQL 中效率不高。
【问题讨论】:
标签: mysql oracle decimal sqldatatypes
Oracle 背景的一些人使用 DECIMAL(31,0) 表示整数的原因是什么。在 MySQL 中效率不高。
【问题讨论】:
标签: mysql oracle decimal sqldatatypes
Oracle 将“INTEGER”ANSI 数据类型实现为 NUMBER(38) 的同义词
更多详情见“Learn Oracle: Datatypes for SQL and PL/SQL, Numbers”
但是,下表应该用作Oracle和MySQL中数据类型之间的映射:
"Oracle® Database SQL Developer Supplementary Information for MySQL Migrations"
Oracle 和 MySQL 比较 > 数据类型 > 比较数据类型
正如here 和here 所解释的,主要区别在于Oracle NUMBER 数据类型是可变长度格式,而MySQL DECIMAL(n) 数据类型曾经是represented as strings that require one byte per digit or sign character(5.0.3 版之前)
(Oracle NUMBER 数据类型)内部数字格式
Oracle 数据库将数值数据存储在 可变长度格式。每个值为 以科学计数法存储,1 字节用于存储指数和向上 到 20 个字节来存储尾数。这 结果值限制为 38 精度位数。甲骨文数据库 不存储前导和尾随 零。例如,数字 412 是 以类似于 4.12 x 的格式存储 102,用1个字节来存储 exponent(2) 和 2 个字节用于存储 的三位有效数字 尾数(4,1,2)。负数 在长度中包含符号。
考虑到这一点,专栏 特定数字的大小(以字节为单位) 数据值 NUMBER(p),其中 p 是 给定值的精度,可以是 使用以下计算 公式:
ROUND((length(p)+s)/2))+1如果数字是,则 s 等于 0 正数,如果数字 s 等于 1 是否定的。
零和正负 无穷大(仅在导入时生成 来自 Oracle 数据库,版本 5)是 使用唯一表示存储。 零和负无穷大 需要 1 个字节;正无穷大 需要 2 个字节。
和
(MySQL) DECIMAL 数据类型更改
存储要求 每个的整数和小数部分 值分别确定。每个 九位数的倍数需要四 字节,以及剩下的任何剩余数字 超过需要四的一小部分 字节。 [...]
例如,DECIMAL(18,9) 列 两边各有九位数字 小数点,所以整数部分和 小数部分每个需要四个 字节。 DECIMAL(20,6) 列具有 十四位整数和六位 小数位数。整数位 需要四个字节的九个 数字和三个字节的 剩下的五位数。 6 小数位需要三个字节。
【讨论】: