DECIMAL
和NUMERIC
类型存储精确的数字数据值
。当保持精确的精度很重要时使用这些类型,例如货币数据。在 MySQL 中,NUMERIC
实现为DECIMAL
,因此以下关于 的说明DECIMAL
同样适用于
NUMERIC
。
MySQLDECIMAL
以二进制格式存储值。请参阅第 12.21 节,“精度数学”。
在DECIMAL
列声明中,可以(并且通常)指定精度和小数位数。例如:
salary DECIMAL(5,2)
在此示例中,5
是精度,
2
是比例。精度表示为值存储的有效位数,小数位数表示小数点后可以存储的位数。
标准 SQL 要求DECIMAL(5,2)
能够存储任何具有五位数字和两位小数的值,因此可以存储在salary
列范围从-999.99
到
999.99
.
在标准 SQL 中,语法
等同于
. 类似地,语法等同于,其中允许实现决定 的值
。MySQL 支持这两种语法形式。默认值为10。
DECIMAL(
M
)DECIMAL(
M
,0)DECIMAL
DECIMAL(
M
,0)M
DECIMAL
M
如果小数位数为 0,则DECIMAL
值不包含小数点或小数部分。
的最大位数为DECIMAL
65,但给定列的实际范围DECIMAL
可能受给定列的精度或小数位数限制。当为此类列分配的值的小数点后位数超过指定比例所允许的位数时,该值将转换为该比例。(精确的行为是特定于操作系统的,但通常效果是截断到允许的位数。)