我有一个表包含列float(10,5)
和decimal(10,5)
我将表更新为:
update table1
set decimaltesting = 12311123123123123.456789,
floattesting = 12311123123123123.456789;
结果变为:
decimal = 99999.99999
float = 100000.00000
但是如果我将列更改为float(6,3)
并decimal(6,3)
使用与上述相同的值进行更新
结果变为:
float = 999.999
decimal = 999.999
为什么对于第一种情况,浮点值将是100000.00000
?
垃圾进垃圾出
记住这个简单的规则。您的陈述在通常情况下是不正确的-例如,在严格的sql模式下,该陈述将失败并显示错误。但是由于您已经获得了如前所述的结果,因此我认为您已允许这种行为。正确的一点是-您的应用程序知道它的模型数据类型-这样的事情就在控制之中-并且您没有将垃圾传递到DBMS,也导致了垃圾的产生。
始终注重精度
您的示例很好地演示了-定点和浮点数据类型之间有什么区别。第一件事-根据手册页:
当给浮点或定点列分配的值超过了指定(或默认)精度和小数位数所隐含的范围时,MySQL将存储代表该范围的相应端点的值。
-这就是为什么您看到这样的原因999.999
。但是-奇怪100000.00000
吗?提示是-您只能在浮点字段中看到此内容。为什么?因为MySQL会将超出范围的值转换为您的字段所允许的最大值,但是由于浮点值大约存储,因此无法保证最终值将保持精度-因此,可能会产生您的100000.00000
值。注意,使用定点数据类型永远不会发生这种情况。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句