MySQL Selects의 부동 소수점 불일치 해결
float 값을 상수와 비교하는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!