结论
不要用float、double类型存储浮点数。改用decimal字段类型
过程
之前是知道浮点数最好不要用float类型做存储,手上遇到老项目使用就正好是float字段存储的体重数据,比如这种。
普通的查询没问题,个别数据就出现查询为空的问题。后来发现都是浮点类型数据,排查框架的sql日志到PDO的参数绑定找遍了都没找到根源。还以为是PDO扩展的data_type出错,因为内部sql执行时浮点数的参数绑定是使用。
$this->PDOStatement->bindValue(':ThinkBind_1_', 51.6, PDO::PARAM_STR)
虽然字段设置了精度,但是依然有查询为空出现。这就是float精度导致的问题。
吐槽
TP5.1 sql日志输出不准确,和实际执行的不一致!
sql输出日志为,实际上执行是,这也增加了排查的难度。
办法
- 浮点数查询使用like
- 使用函数比如,或者
- 使用字段类型
参考:
https://www.cnblogs.com/powerwu/articles/8465031.html
https://blog.csdn.net/luccs624061082/article/details/84286253