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 列的实际范围可能会受到给定列的精度或标度的限制。当为这样的列分配一个值时,如果小数点后的位数多于指定的标度允许的位数,则该值将转换为该标度。(精确的行为是特定于操作系统的,但通常效果是截断到允许的位数。)