暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL的函数和运算符 - 精确数学 - DECIMAL 数据类型特征

林员外聊编程 2021-10-09
823
DECIMAL 数据类型特征
 
本部分讨论 DECIMAL 数据类型(及其同义词)的特征,特别是以下主题:
 
 最大位数
 
 存储格式
 
 存储要求
 
  DECIMAL 列的上限范围的非标准 MySQL 扩展
 
DECIMAL 列的声明语法是 DECIMAL(M,D)。参数的取值范围如下:
 
 M 是最大位数(精度)。取值范围是 1~65
 
 D 是小数点右边的位数(标度)。取值范围为 0~30,且不能大于 M
 
如果省略 D,则默认为 0。如果省略 M,则默认为 10
 
M 的最大值为 65,意味着对 DECIMAL 值的计算可以精确到65位。这个 65 位精度的限制也适用于精确值数字字面量,因此这种字面量的最大范围与以前不同。(DECIMAL 文本字面量的长度也有限制。)
 
DECIMAL 列的值使用二进制格式存储,该格式将9个十进制数字打包为4个字节。每个值的整数部分和小数部分的存储要求分别确定。每个9位数需要4个字节,任何剩余的数字都需要4个字节的一部分。下表给出了剩余数字所需的存储空间。
 
剩余数字
字节数
0
0
12
1
34
2
56
3
79
4
 
例如,DECIMAL(18,9) 列在小数点两边各有9位数字,因此整数部分和小数部分各需要4个字节。DECIMAL(20,6) 列有14个整数位数和6个小数位数。整数位数中有9位需要4个字节,其余5位需要3个字节。6位小数需要3个字节。
 
DECIMAL 列不存储前导的+字符、-字符或前导的0数字。如果将 +0003.1 插入 DECIMAL(5,1) 列,则将其存储为 3.1。对于负数,不存储 - 字面量。
 
DECIMAL 列不允许值大于列定义所指示的范围。例如,DECIMAL(3,0) 列支持-999999的范围。DECIMAL(M,D) 列允许小数点左边最多 M - D 位。
 
SQL 标准要求 NUMERIC(M,D) 的精度为恰好 M 位。对于 DECIMAL(M,D),该标准要求至少 M 位的精度,但允许更多。在 MySQL 中,DECIMAL(M,D) NUMERIC(M,D) 是相同的,两者的精度都是 M 位。
 
关于 DECIMAL 值的内部格式的完整解释,请参阅MySQL源分发版中的文件 strings/decimal.c。在 decimal2bin() 函数中解释了这种格式(通过示例)
 
 
 
 
 
官方网址:
https://dev.mysql.com/doc/refman/8.0/en/precision-math-decimal-characteristics.html
文章转载自林员外聊编程,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论