在64位MySQL实现中,DECIMAL(m,n)
列规范和该列的实际表示之间有什么关系?
我在一个上下文中定义表,我知道我需要一个精确的值(因此是DECIMAL
),但我不知道我对小数部分的截断错误有多敏感.因此,我想 Select 一个合理利用底层存储的列规范(我知道这是一个64位系统).
尽管进行了合理的搜索,但我还没有在MySQL文档中找到答案.
在64位MySQL实现中,DECIMAL(m,n)
列规范和该列的实际表示之间有什么关系?
我在一个上下文中定义表,我知道我需要一个精确的值(因此是DECIMAL
),但我不知道我对小数部分的截断错误有多敏感.因此,我想 Select 一个合理利用底层存储的列规范(我知道这是一个64位系统).
尽管进行了合理的搜索,但我还没有在MySQL文档中找到答案.
如果您使用的是64位MySQL版本,这并不重要.十进制支持大于64位的精度.
DECIMAL每9位使用4个字节,剩余的数字使用额外的字节.例如,十进制(32,0)最多支持9+9+9+5位数.前27位将使用4+4+4字节,其余5位将再使用3个字节.总共12+3或15字节.
十进制值的小数部分(小数点后)同样存储数字.所以十进制(32,9)支持整数部分最多9+9+5位,小数部分最多9位.因此,整数为4+4+3字节,小数部分为4字节.
在decimal2bin()
函数的代码注释中,有一个更详细的描述,包括字节以下的示例: