MySQL 9.0 发布说明
DECIMAL
和 NUMERIC
类型存储精确的数值数据。当需要保留精确精度时,例如用于货币数据,就会使用这些类型。在 MySQL 中,NUMERIC
是作为 DECIMAL
实现的,因此关于 DECIMAL
的以下说明同样适用于 NUMERIC
。
MySQL 以二进制格式存储 DECIMAL
值。请参见 第 14.25 节,“精确数学”。
在 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
列的实际范围可能会受到给定列的精度或标度的限制。当为这样的列分配一个值时,如果小数点后的位数多于指定的标度允许的位数,则该值将转换为该标度。(精确的行为是特定于操作系统的,但通常效果是截断到允许的位数。)