今天听到一个说法,说float类型不能用等值查询,用等值查询你是查不到结果的。之前我可是完全不知道这么个结论啊。。作为DBA一枚,怎么能道听途说呢,万一别人胡说八道呢。我得先验证下这个小道消息对不对。。
root@127.0.0.1 : wing 11:57:45> create table t(id float);
Query OK, 0 rows affected (0.51 sec)
root@127.0.0.1 : wing 12:01:29> insert into t values(1.1);
Query OK, 1 row affected (0.28 sec)
root@127.0.0.1 : wing 12:01:38> select * from t;
+------+
| id |
+------+
| 1.1 |
+------+
1 row in set (0.00 sec)
# 哎呀呀,明明有1.1这个记录,为什么就是查不到哇
root@127.0.0.1 : wing 12:01:41> select * from t where id=1.1;
Empty set (0.00 sec)
# 试试这个方法
root@127.0.0.1 : wing 12:01:47> select * from t where id>1;
+------+
| id |
+------+
| 1.1 |
+------+
1 row in set (0.00 sec)
# 再试试这个方法
root@127.0.0.1 : wing 12:02:18> select * from t where id<2;
+------+
| id |
+------+
| 1.1 |
+------+
1 row in set (0.00 sec)
# 这个方法查不到倒是符合预期的
root@127.0.0.1 : wing 12:07:09> select * from t where id=1
-> ;
Empty set (0.00 sec)
通过实验验证,好像别人真的不是胡说八道呢。可是为什FLOAT类型不能等值查询呢,即浮点数为什么不能等号比较呢?。。
人就怕认真(我在自夸,你感受到了咩。。)
通过科学上网,我找到了原因。。
float在存储时是以近似值的方式存储的,所以不能使用等值查询。