11.1.3 定点类型(精确值)-DECIMAL,NUMERIC

DECIMALNUMERIC类型存储精确的数字数据值。当保留精确度很重要时,例如使用货币数据,则可以使用这些类型。在 MySQL 中,NUMERIC被实现为DECIMAL,因此以下有关DECIMAL的说明同样适用于NUMERIC

MySQL 以二进制格式存储DECIMAL值。参见第 12.22 节“精密 math”

DECIMAL列声明中,可以(通常是)指定精度和小数位数。例如:

salary DECIMAL(5,2)

在此示例中,5是精度,而2是小数位。精度 table 示值存储的有效位数,小数位数 table 示小数点后可以存储的位数。

标准 SQL 要求DECIMAL(5,2)能够存储具有五位数字和两位小数的任何值,因此可以存储在salary列中的值的范围是-999.99999.99

在标准 SQL 中,语法DECIMAL(M)等效于DECIMAL(M,0)。类似地,语法DECIMAL等效于DECIMAL(M,0),其中允许实现确定* M *的值。 MySQL 支持DECIMAL语法的这两种变体形式。 * M *的默认值为 10.

如果小数位数为 0,则DECIMAL值不包含小数点或小数部分。

DECIMAL的最大位数为 65,但是给定DECIMAL列的实际范围可能受给定列的精度或小数位数的限制。当为这样的列分配的值的小数点后的位数比指定刻度允许的位数多时,该值将转换为该刻度。 (精确的行为是特定于 os 的,但是通常效果是将其截断为允许的位数.)