Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  DECIMAL Data Type Characteristics

14.24.2 DECIMAL 数据类型特征

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

  • 最大数字个数

  • 存储格式

  • 存储要求

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

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

  • M是最大数字个数(精度)。它的取值范围是1到65。

  • D是小数点右侧的数字个数(精度)。它的取值范围是0到30,并且不能大于M

如果D被省略,缺省为0。如果M被省略,缺省为10。

DECIMAL值的计算精度最高到65位。这也适用于精确值数字字面量的最大范围(见Section 14.24.3, “Expression Handling”)。

DECIMAL值存储在二进制格式中,每9个数字占用4个字节。存储整数和小数部分的要求分别确定。每个值的整数部分和小数部分都需要4个字节。剩余的数字需要的存储量见下表。

Leftover Digits Number of Bytes
0 0
1–2 1
3–4 2
5–6 3
7–9 4

例如,DECIMAL(18,9)列有9个数字在小数点两侧,因此整数部分和小数部分各需要4个字节。DECIMAL(20,6)列有14个整数数字和6个小数数字。整数数字需要4个字节的9个数字和3个字节的5个数字。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() 函数中有详细解释(带示例)。