DECIMAL(m,n)在64位系统中是如何表示的



在64位MySQL实现中,DECIMAL(m,n)列规范与该列的实际表示之间的关系是什么?

我在一个上下文中定义表,我知道我需要一个精确的值(因此是DECIMAL(,而且我不知道我对小数部分的截断错误有多敏感。因此,我想选择一个合理利用底层存储的列规范(我知道它是一个64位系统(。

尽管进行了合理的搜索,但我还没有在MySQL文档中找到答案。

如果您使用的是64位MySQL构建,这并不重要。DECIMAL支持大于64位的精度。

DECIMAL对每9位数字使用4个字节,对剩余数字使用额外的字节。例如,DECIMAL(32,0(最多支持9+9+5位数字。它将对前27位使用4+4+4字节,然后对其余5位使用3个字节。总共12+3或15个字节。

十进制值的小数部分(在小数点之后(类似地存储数字。因此,DECIMAL(32,9(将支持整数部分最多9+9+5位,小数部分最多支持9位。因此,整数为4+4+3字节,小数部分为4字节。

decimal2bin()函数的代码注释中,有一个更详细的描述,示例一直到字节:https://github.com/mysql/mysql-server/blob/8.0/strings/decimal.cc#L1282-l1433

最新更新