一些具有 Oracle 背景的人使用 DECIMAL(31,0) 表示整数的原因是什么?在 MySQL 中它效率不高。

有帮助吗?

解决方案

Oracle 将“INTEGER”ANSI 数据类型实现为 NUMBER(38) 的同义词

更多详情请参见“学习甲骨文:SQL 和 PL/SQL 的数据类型、数字"

但是,应该使用下表作为 Oracle 和 MySQL 中数据类型之间的映射:

“Oracle® Database SQL Developer MySQL 迁移的补充信息”

Oracle 和 MySQL 比较 > 数据类型 > 比较数据类型

主要区别,如所解释的 这里这里 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位数字。Oracle数据库不存储领先和尾随的零。例如,数字412以类似于4.12 x 102的格式存储,其中1个字节用于存储指数(2)和2个字节,用于存储Mantissa的三个有效数字(4,1,2)。负数包括其长度的标志。

考虑到这一点,可以使用以下公式来计算特定数字数据值(P)的字节中的列大小,其中P是给定值的精度:

ROUND((length(p)+s)/2))+1

如果数字为正,则s等于零,如果数字为负,则等于1。

使用唯一表示形式存储零,正和负的无穷大(仅在Oracle数据库中产生,版本5)。零和无限无穷大需要1个字节;正无穷大需要2个字节。

(MySQL) DECIMAL 数据类型更改

分别确定整数和分数部分的存储要求。九位数字的每个数字都需要四个字节,而剩下的任何剩余数字都需要四个字节的一小部分。[...]

例如,十进制(18,9)列在小数点的两侧都有9个数字,因此整数部分和分数部分每个都需要四个字节。十进制(20,6)列有14个整数数字和六个分数数字。整数数字需要四个字节,其中九个数字和剩余五位数字需要三个字节。六个分数需要三个字节。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top