11.1.3 定点类型(精确值)-DECIMAL,NUMERIC
DECIMAL
和NUMERIC
类型存储精确的数字数据值。当保留精确度很重要时,例如使用货币数据,则可以使用这些类型。在 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.99
到999.99
。
在标准 SQL 中,语法DECIMAL(M)
等效于DECIMAL(M,0)
。类似地,语法DECIMAL
等效于DECIMAL(M,0)
,其中允许实现确定* M
*的值。 MySQL 支持DECIMAL
语法的这两种变体形式。 * M
*的默认值为 10.
如果小数位数为 0,则DECIMAL
值不包含小数点或小数部分。
DECIMAL
的最大位数为 65,但是给定DECIMAL
列的实际范围可能受给定列的精度或小数位数的限制。当为这样的列分配的值的小数点后的位数比指定刻度允许的位数多时,该值将转换为该刻度。 (精确的行为是特定于 os 的,但是通常效果是将其截断为允许的位数.)