# 11.1.3 定点类型(精确值) - 十进制、数字

十进制数字类型存储精确的数字数据值。当保持精确的精度很重要时使用这些类型,例如货币数据。在 MySQL 中,数字被实现为十进制, 所以以下关于十进制同样适用于数字.

MySQL 存储十进制二进制格式的值。看第 12.25 节,“精确数学”.

在一个十进制列声明,可以(通常是)指定精度和小数位数。例如:

salary DECIMAL(5,2)

在这个例子中,5是精度和2是规模。精度表示为值存储的有效位数,小数位数表示可以存储在小数点后的位数。

标准 SQL 要求小数(5,2)能够存储任何五位数字和两位小数的值,因此可以存储在薪水列范围从-999.99999.99.

在标准 SQL 中,语法十进制(**)相当于十进制(**,0).同样,语法十进制相当于十进制(**,0),其中允许实现来决定*.MySQL 支持这两种变体形式十进制句法。默认值为*是 10。

如果比例为 0,十进制值不包含小数点或小数部分。

最大位数十进制是 65,但给定的实际范围十进制列可以受给定列的精度或比例约束。当为此类列分配的值的小数点后位数超过指定比例允许的位数时,该值将转换为该比例。(确切的行为是特定于操作系统的,但通常效果是截断到允许的位数。)