解决 MySQL 选择中的浮点差异
当执行带有 WHERE 子句的 SELECT 语句来将浮点值与常量进行比较时,用户可能会遇到意想不到的结果。例如,以下查询不返回任何行:
<code class="sql">SELECT * FROM `table` WHERE `ident`='ident23' AND `price`='101.31';</code>
但是,删除价格比较条件会产生正确的行:
<code class="sql">SELECT * FROM `table`;</code>
这种差异可以归因于 MySQL 处理的方式浮点精度。虽然从数据库检索到的值显示“101.31”,但由于浮点算术不准确,它可能与 WHERE 子句中使用的实际常量略有不同。
解决方案:转换为 DECIMAL
要解决此问题,可以在 WHERE 子句中将价格列转换为 DECIMAL 类型:
<code class="sql">SELECT * FROM `table` WHERE CAST(price AS DECIMAL) = CAST(101.31 AS DECIMAL);</code>
这可确保数据库值和常量都表示为 DECIMAL,消除任何潜在的精度问题。
替代解决方案:更改列类型
作为替代方案,请考虑直接将价格列的数据类型更改为 DECIMAL。 DECIMAL 在处理货币值时提供更高的精度和规模,无需在 SELECT 查询中进行转换。
以上是为什么我的 MySQL SELECT 语句在比较浮点值与常量时不返回任何行?的详细内容。更多信息请关注PHP中文网其他相关文章!