使用DECIMAL的原因(31,0)

时间:2009-12-15 13:11:23

标签: mysql oracle decimal sqldatatypes

Oracle背景中的某些人使用DECIMAL(31,0)作为整数的原因是什么。在MySQL中它效率不高。

1 个答案:

答案 0 :(得分:4)

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比较>数据类型>比较数据类型

正如herehere所解释的那样,主要区别在于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个字节   这三个有效数字   尾数(4,1,2)。负数   包括他们长度的标志。

     

考虑到这一点,专栏   特定数字的大小(以字节为单位)   数据值NUMBER(p),其中p是   给定值的精度,可以   使用以下计算   式:

     

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

     

如果数字为s,则s等于零   正数,如果数字,则s等于1   是否定的。

     

零,正面和负面   无穷大(仅在导入时生成   来自Oracle数据库,版本5)   使用唯一表示存储。   每个零和负无穷大   需要1个字节;正无穷大   需要2个字节。

  

(MySQL)DECIMAL数据类型更改

     

的存储要求   每个的整数和小数部分   价值单独确定。每   九位数的倍数需要四位数   字节,剩下的任何剩余数字   超过需要四分之一   字节。 [...]

     

例如,DECIMAL(18,9)列   在两侧各有九位数字   小数点,所以整数部分和   小数部分每个需要四个   字节。 DECIMAL(20,6)专栏有   十四位整数和六位   小数位数。整数位数   九个需要四个字节   数字和三个字节   剩下的五位数。 6   小数位需要三个字节。