MySQL 8.3 Release Notes
DECIMAL 和 NUMERIC 类型存储精确的数字数据值。当需要保留精确的精度时,例如在货币数据中,这些类型非常有用。在 MySQL 中,NUMERIC 实现为 DECIMAL,因此以下关于 DECIMAL 的备注也同样适用于 NUMERIC。
MySQL 以二进制格式存储 DECIMAL 值。请参阅 第 14.24 节,“精度数学”。
在 DECIMAL 列声明中,精度和刻度可以(通常是)指定。例如:
salary DECIMAL(5,2)
在这个示例中,5 是精度,2 是刻度。精度表示存储值的重要数字位数,而刻度表示小数点后的数字位数。
标准 SQL 要求 DECIMAL(5,2) 能够存储任何五位数字和两位小数的值,因此可以在 salary 列中存储的值范围从 -999.99 到 999.99。
在标准 SQL 中,语法 DECIMAL( 等同于 M)DECIMAL(。类似地,语法 M,0)DECIMAL 等同于 DECIMAL(,其中实现可以决定 M,0)M 的值。MySQL 支持这两种变体形式的 DECIMAL 语法。默认值为 M 是 10。
如果刻度为 0,DECIMAL 值不包含小数点或小数部分。
DECIMAL 的最大数字位数为 65,但给定 DECIMAL 列的实际范围可以由精度或刻度约束。当将值分配给具有更多小数点后的数字位数的列时,该值将被转换为该刻度。(精确的行为是操作系统特定的,但通常的效果是截断到允许的数字位数。)