Documentation Home
MySQL 8.0 参考手册  / 第 12 章函数和运算符  / 12.25 精密数学  /  12.25.2 DECIMAL 数据类型特征

12.25.2 DECIMAL 数据类型特征

本节讨论 DECIMAL数据类型(及其同义词)的特征,特别是关于以下主题:

  • 最大位数

  • 存储格式

  • 存储要求

  • DECIMAL对列 上限范围的非标准 MySQL 扩展

列的声明语法 DECIMAL是 . 参数值的范围如下: DECIMAL(M,D)

  • M是最大位数(精度)。它的范围是 1 到 65。

  • D是小数点右边的位数(刻度)。它的范围是 0 到 30,并且不能大于M.

如果D省略,则默认为 0。如果 M省略,则默认为 10。

最大值 65M表示对DECIMAL值的计算精确到 65 位。这个 65 位精度的限制也适用于精确值数字文字,因此此类文字的最大范围与以前不同。(文字文本的长度也有限制DECIMAL ;请参阅 第 12.25.3 节,“表达式处理”。)

列的值DECIMAL使用二进制格式存储,该格式将九个十进制数字打包成 4 个字节。每个值的整数和小数部分的存储要求分别确定。九个数字的每个倍数需要 4 个字节,剩下的任何剩余数字都需要 4 个字节的一部分。下表给出了剩余数字所需的存储空间。

剩余数字 字节数
0 0
1–2 1个
3–4 2个
5–6 3个
7–9 4个

例如,一DECIMAL(18,9)列小数点两边各有九位数字,那么整数部分和小数部分各需要4个字节。一 DECIMAL(20,6)列有十四位整数和六位小数。整数数字中的九个数字需要四个字节,其余五个数字需要三个字节。六个小数位需要 3 个字节。

DECIMAL列不存储前导+字符或- 字符或前导0数字。如果插入 +0003.1DECIMAL(5,1) 列中,它将存储为3.1. 对于负数,-不存储文字字符。

DECIMAL列不允许值大于列定义隐含的范围。例如,一列支持到DECIMAL(3,0)的范围。一 列最多允许小数点左边的 - 位数字。-999999DECIMAL(M,D)MD

SQL 标准要求 的精度为 精确 数字。对于 ,标准要求精度至少为 位数,但允许更多。在 MySQL 中, 和 是相同的,并且都具有精确的 数字精度。 NUMERIC(M,D) MDECIMAL(M,D)MDECIMAL(M,D)NUMERIC(M,D)M

有关 DECIMAL值的内部格式的完整说明,请参阅 strings/decimal.cMySQL 源代码分发中的文件。该格式在函数中进行了解释(通过示例) decimal2bin()