我将列的长度定义为 double(16,2)。这里16不固定。但是2是固定的。虽然显示长度(16)会根据计算而变化。所以我想让它变长。
现在我的问题是 - 有没有办法只定义浮点数(即我的例子中的2)和显示长度(16)作为变量。因为我不想占用不必要的空间。
答案 0 :(得分:4)
FLOAT和DOUBLE类型表示近似数值数据值。
MySQL对单精度值使用4个字节,对双精度值使用8个字节。
MySQL也支持这种可选的精度规范,但精度值仅用于确定存储大小。精度从0到23会产生一个4字节的单精度FLOAT列。精度从24到53会产生8字节的双精度DOUBLE列。
MySQL允许非标准语法:FLOAT(M,D)或REAL(M,D)或DOUBLE PRECISION(M,D)。这里,“(M,D)”表示总共可以存储最多M位的值,其中D位可以在小数点之后。
<强> FLOAT:强>
小(单精度)浮点数。允许值为-3.402823466E + 38至-1.175494351E-38,0和1.175494351E-38至3.402823466E + 38。这些是基于IEEE标准的理论限制。实际范围可能略小,具体取决于您的硬件或操作系统。 单精度浮点数精确到大约7位小数。 这不是必需的,默认为 10,2, (如果省略M和D,则将值存储到硬件允许的限制。)
<强> DOUBLE:强>
M是总位数,D是小数点后面的位数。如果省略M和D,则将值存储到硬件允许的限制。双精度浮点数精确到大约15位小数。 这不是必需的,默认为 16,4 ,其中4是小数位数。 (如果省略M和D,则将值存储到硬件允许的限制。)
了解更多 http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html
答案 1 :(得分:1)
MySQL DOUBLE
数据类型occupies 8 bytes of storage,无论您存储在哪个数字。