Mysql双倍长度错误

时间:2018-06-17 06:24:47

标签: mysql

我想为百分数做专栏。
我需要写:1.00,2.00,99.99,100 ..% 我如何才能使用双重类型?

现在我有:

Double(4,2)

但是当我在专栏中写100时,我得到错误:

  

数值超出范围:1264超出列

的范围值

4 个答案:

答案 0 :(得分:2)

查看答案heredoubledecimal语法相同)或MySQL manual

  

DOUBLE [(M,D)]

     

M是总位数,D是小数点后面的位数。如果省略M和D,则将值存储到硬件允许的限制。双精度浮点数精确到大约15位小数。

简而言之,DOUBLE(4,2)表示最多4位数,小数点后<2>位 。因此,为了支持100之前的两位小数,您需要:

double(5,2) unsigned

请注意,unsigned不是强制性的,但如果您知道不需要负值,则可以提高性能和安全性。

答案 1 :(得分:0)

double(4,2)表示一个总共四位数的双精度数,其中两个位于小数点右侧,这意味着您只有4-2 = 2位数。 100小数点左边有三位数,因此出错。使用double(5,2)代替应解决问题。

答案 2 :(得分:0)

来自MySQL docs

MySQL允许使用非标准语法:

FLOAT(M,D) or REAL(M,D) or DOUBLE PRECISION(M,D).
Here, (M,D) means than values can be stored with up to M digits in total, 
of which D digits may be after the decimal point.   

例如,
定义为 FLOAT(7,4)的列在显示时将显示为-999.9999

MySQL在存储值时执行舍入,因此如果将999.00009插入FLOAT(7,4)列,则大致结果为999.0001

要解决您的问题,您需要增加M.的大小,即Double(5,2)

答案 3 :(得分:0)

我注意到还有另一件事可以帮助某人。

IN DOUBLE(M,D) M 代表包括 D 在内的总位数, D 代表小数点后的数字,< / p>

如果某人分配了相同的 M D 值,则只能在小数点后设置值,而不能在小数点后设置值。

在这里我尝试用一​​个例子来解释,

如果要分配诸如DOUBLE(5,5)之类的数据类型值,则只能输入0.00001至0.99999之类的值,而不能输入1.0001或1.0000。

还有分配 D 的限制,您不能将 D 分配到大于 M 的位置,只有 M> = D