MySQL における FLOAT データ型と DECIMAL データ型の違いを理解する
MySQL で数値データを扱う場合、FLOAT と DECIMAL のどちらを選択するかデータ型は精度に重大な影響を与える可能性があり、パフォーマンス。
FLOAT: 潜在的なエラーを伴うより効率的なオプション
FLOAT データ型は、バイナリ表現を使用して 10 進数値を近似する浮動小数点数を格納します。 DECIMAL よりも広い範囲の値が提供されますが、精度は低下します。バイナリ表現の性質上、以下の例に示すように、除算演算では丸め誤差が生じる可能性があります。
mysql> create table numbers (a float, b float); mysql> insert into numbers values (100, 100); mysql> select @a := (a/3), @b := (b/3), @a * 3, @b * 3 from numbers \G *************************** 1. row *************************** @a := (a/3): 33.333333333333 @b := (b/3): 33.333333333333 @a + @a + @a: 99.999999999000000000000000000000 @b + @b + @b: 100
この例では、FLOAT データ型は除算演算の結果を 33.333333333333 に丸めます。 3を掛けるとわずかに異なる合計になります(99.999999999000000000000000000000) と元の値 (100) との比較。
DECIMAL: 柔軟性は低くても高精度
DECIMAL データ型には、次のように表される固定小数点数が格納されます。として指定された小数点以下の桁数を持つ整数。このアプローチでは、特に金額の精度が保証され、除算演算中に小数部分が切り捨てられます。
mysql> create table numbers (a decimal(10,2), b decimal(10,2)); mysql> insert into numbers values (100, 100); mysql> select @a := (a/3), @b := (b/3), @a * 3, @b * 3 from numbers \G *************************** 1. row *************************** @a := (a/3): 33.33 @b := (b/3): 33.33 @a + @a + @a: 99.99 @b + @b + @b: 100
この例では、DECIMAL データ型は除算演算の結果を 33.33 に切り捨て、計算された値が確実に合計 (99.99) は元の値 (100) と一致します。
正しいデータの選択型
FLOAT と DECIMAL のどちらを選択するかは、アプリケーションの特定の要件によって異なります。
これらの違いを理解することで、MySQL ユーザーはデータ ストレージを最適化し、数値演算の正確な結果を保証できるようになります。
以上がMySQL における FLOAT と DECIMAL: 各データ型をいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。