【问题标题】:Reason to use DECIMAL(31,0)使用 DECIMAL(31,0) 的原因
【发布时间】:2010-12-26 19:32:19
【问题描述】:

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

【问题讨论】:

    标签: mysql oracle decimal sqldatatypes


    【解决方案1】:

    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 精度位数。甲骨文数据库 不存储前导和尾随 零。例如,数字 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 小数位需要三个字节。

    【讨论】:

      猜你喜欢
      • 2013-03-15
      • 2018-08-08
      • 1970-01-01
      • 2011-09-16
      • 2010-11-18
      • 2013-12-18
      • 1970-01-01
      • 1970-01-01
      • 2018-05-28
      相关资源
      最近更新 更多