gpt4 book ai didi

oracle - Oracle 需要 22 个字节来存储多少个数字?

转载 作者:行者123 更新时间:2023-12-02 17:56:55 25 4
gpt4 key购买 nike

在 Oracle 19c 中,使用 DUMP 和 block 转储,我已经能够存储 NUMBER 个值,大到需要 21 字节(负数时)。任何更高的数字都会四舍五入有效数字,并允许数字达到 125 位,但绝不使用超过 21 个字节。因此,如果 21 是 Oracle 用于存储数字的最大字节数,为什么 dba_tab_cols 和官方文档都说最大大小是 22 字节? 实际需要 22 个字节的数字是多少

如果有人可以做到这一点,请提供 DUMP 输出以显示 22 字节数字,以及它是什么数字。

更新:我插入了一行,其中有两个 NUMBER 列,每列均为 -9+E38。每个 block 转储,它们应该以这种方式存储:

enter image description here

但是 block 转储被解释为供人类消费。因此,我对数据文件本身进行了八进制转储 (od)。以下八进制转储显示,字段的大小首先存储在与第一个值 (0x2c) 相邻的位置(0x15 = 21 字节),然后是另外 20 个以 0x6602 结尾的值字节。然后下一个数字重复同样的事情。因此,我想如果我们计算大小字节的话,确实需要 22 个字节来存储最精确的数字。但对于所有其他数据类型来说也是如此,因此他们将其计入数字的“22”而不是其他数据类型是没有意义的。

enter image description here

最佳答案

目前还不清楚为什么允许 22 字节,并且有记录。可能有一些古老的历史和规模幸存下来。

10gR2 documentation Oracle 支持文档 1031902.6 给出了不同的公式来计算存储数字所需的长度;两者都基于值的精度(但不是小数位数)和符号,并且两者都给出最大值 - 对于精度 38 - 21 字节,而不是 22。

所以看来不可能有任何数字需要或可以利用全部 22 个字节。

Oracle 调用接口(interface)程序员指南 also says NUMBER 的最大内部存储空间为 21 字节。 the NUMBER datatype的解释该文档还解释了存储,可能比支持文档更好:

Oracle Database stores values of the NUMBER data type in a variable-length format. The first byte is the exponent and is followed by 1 to 20 mantissa bytes.

由于它是 OCI 引用,它还提到“输出变量应该是 21 字节数组以容纳尽可能大的数字”,但之前说过不要使用它。

但它也谈到 the VARNUM datatype它说“保留 22 个字节以接收最长的可能的 VARNUM”,这可能与为什么 22 个字节可用有关,也可能是巧合。

关于oracle - Oracle 需要 22 个字节来存储多少个数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75453795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com