我无法掌握MySQL的DECIMAL。我需要行能够包含从00.0001到99.9999之间的任何数字。我将如何构建它以便像这样工作?
答案 0 :(得分:409)
DOUBLE列 与DECIMAL列相同,如果您使用DOUBLE列作为财务数据,将遇到麻烦。
DOUBLE实际上只是FLOAT的双精度(64位而不是32位)版本。浮点数是real numbers的近似表示,它们并不精确。实际上,像0.01这样的简单数字在FLOAT或DOUBLE类型中没有精确的表示。
DECIMAL列是精确的表示形式,但它们占用更多空间,可用于更小范围的可能数字。要创建一个能够保存0.0001到99.9999之间值的列,就像您要求的那样,需要以下语句
CREATE TABLE your_table
(
your_column DECIMAL(6,4) NOT NULL
);
列定义遵循DECIMAL(M,D)格式,其中 M 是最大位数(精度)和 D 是小数点右边的位数( scale )。
这意味着上一个命令会创建一个接受-99.9999到99.9999之间值的列。您还可以创建一个UNSIGNED DECIMAL列,范围从0.0000到99.9999。
有关MySQL DECIMAL的更多信息,official docs始终是一个很好的资源。
请记住,所有这些信息都适用于MySQL 5.0.3及更高版本。如果您使用以前的版本,那么您真的应该升级。
答案 1 :(得分:45)
虽然上面的答案似乎是正确的,但只是一个简单的解释,让您了解它是如何工作的。
假设您的列设置为DECIMAL(13,4)
。这意味着该列的总大小为13位,其中4位将用于精确表示。
因此,总而言之,对于该列,您的最大值为:999999999.9999
答案 2 :(得分:11)
答案 3 :(得分:6)
用于十进制数据类型的MySQL 5.x specification是:DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
。上面的答案是错误的,说无法使用无符号小数。
要定义一个只允许无符号小数的字段,总长度为6位,其中4位为小数,您可以使用:DECIMAL (6,4) UNSIGNED
。
您同样可以创建无符号(即非负)FLOAT和DOUBLE数据类型。