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
列的实际范围可以由精度或刻度约束。当将值分配给具有更多小数点后的数字位数的列时,该值将被转换为该刻度。(精确的行为是操作系统特定的,但通常的效果是截断到允许的数字位数。)