如何使用MySQL DECIMAL?
我不能完全掌握MySQL的DECIMAL。 我需要该行可以包含从00.0001到99.9999之间的任意数字。 我将如何构build它像这样工作?
DOUBLE列与DECIMAL列不同,如果您使用DOUBLE列作为财务数据, 则会遇到麻烦 。
DOUBLE实际上只是FLOAT的双精度(64位而不是32位)版本。 浮点数是实数的近似表示,它们不是精确的。 实际上,像0.01这样的简单数字在FLOAT或DOUBLEtypes中没有精确的表示forms。
DECIMAL列是精确的表示,但是它们占用了更多的空间,可用的数字范围更小。 要创build一个能够保持从0.0001到99.9999的值的列,就像你问的那样,你需要下面的语句
CREATE TABLE your_table ( your_column DECIMAL(6,4) NOT NULL );
列定义遵循DECIMAL(M,D)格式,其中M是最大位数( 精度 ), D是小数点右边的位数( 标度 )。
这意味着前面的命令会创build一个接受-99.9999到99.9999的值的列。 您也可以创build一个UNSIGNED DECIMAL列,范围从0.0000到99.9999。
有关MySQL DECIMAL的更多信息, 官方文档总是很好的资源。
请记住,所有这些信息对于MySQL 5.0.3及更高版本都是正确的。 如果你使用的是以前的版本,你应该升级。
虽然上面的答案似乎是正确的,但只是一个简单的解释,让你知道它是如何工作的。
假设你的列被设置为DECIMAL(13,4)
。 这意味着该列将具有13位数的总大小,其中4个将被用于精确表示。
因此,总而言之,对于该列,您将拥有最大值: 999999999,9999
十进制数据types的MySQL 5.x 规范是: DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
。 上面的答案是错误的,说无符号小数是不可能的。
要定义一个只允许无符号小数的字段,总长度为6位,其中4位是小数,你可以使用: DECIMAL (6,4) UNSIGNED
。
您也可以创build无符号的(即不是负的)FLOAT和DOUBLE数据types。
评论中有正确的解决scheme,但总结为一个答案:
你必须使用DECIMAL(6,4)。
那么你可以有6位总数,2位在小数点之后(小数点后4位)。 至less按照这个 。