1

我在数据库中有一些值,在我想要搜索的 FLOAT 列中。

奇怪的是,运行此命令时 2.5 的值又回来了:

SELECT * from `prices` WHERE `price` = 2.5

但是当我在 4.8 上搜索时没有返回任何内容,除非我在比较之前对列进行了修剪,如下所示:

SELECT * from `prices` WHERE trim(`price`) = 4.8

任何人都知道这可能是什么原因,我认为因为它是一个 FLOAT 字段,所以不应该有任何需要修剪的前导或尾随空格。我假设 4.8 的数字没什么特别的,但它仍然很有趣。

浏览数据库时,我可以看到它是一个普通的 4.8,没有前导或尾随字符。

我有点难为为什么会发生这种情况。

4

1 回答 1

2

这是因为 4.8 不能用浮点数表示。您可以获得非常接近它的值,但不是确切的值。

我不完全确定 trim 对它做了什么(我找不到任何指定行为的东西,可能它实际上没有定义),但我知道它正在改变值,所以你可以获得匹配。如果您对浮动的行为有进一步的兴趣,请阅读此http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html(尽管它不会告诉您有关 trim 的任何信息给他们)。

于 2012-11-20T03:31:19.380 回答