MysqlのDecimalタイプは何ですか?

2499 ワード

私たちがMysqlにフィールドを保存するとき、例えばお金に関するデータがあります.この時、正確な要求が非常に高くなります.では、この时、私达が前に学んだ8つの基本的なタイプはもう需要を満たすことができなくて、整形しても浮動小数点型にしても、ある人は整形を保存して何がいけないと言っていますが、あなたはすべての人の金額が整数ではないことを知っています.これでダメなら浮動小数点型でいいのか、銀行貯金にとっては小数点以下の問題で一銭の金額が大きくなったり小さくなったり…So、この時はDecimalタイプを試してみると、あなたの問題をうまく解決できることがわかります.
decimalの詳細:
   decimal(a,b)
パラメータの説明:
a:小数点の左と右に格納できる10進数の最大個数を指定し、最大精度は38.
b:小数点の右に格納できる10進数の最大数を指定します.小数点以下の桁数は0~aの値である必要があり、デフォルトの小数点以下の桁数は0である. 
例を挙げて説明します.11615.2365324568この数はあなたが言った3つのフォーマットdecimal:1615 decimal(3):999 decdimal(3,2):9.99 decimal(10,5)11615.23653の精度範囲を超えた数が強く制御され、データ型定義のフォーマットのみが表示されます.
コメント:
decimalデータ型は、非常に高い精度が要求される計算に用いられ、これらのタイプは、選択パラメータとして数値の精度と計算方法を指定することを可能にする.ここで精度とは、この値のために保存されている有効な数字の合計数を指す.カウント方法とは、小数点以下の数字の個数を指します.たとえば、decimal(5,2)は、格納された値が5桁を超えず、小数点の後ろに2桁の数字があることを規定しています.
例1:
 mysql> create table t1(c1 float(10,2), c3decimal(10,2)); 

         Query OK, 0 rows affected (0.02 sec)

         mysql> insert into t1 values(9876543.21, 9876543.12);                   

         Query OK, 1 row affected (0.00 sec)

         mysql> select * from t1;                        

         +----------------+----------------+

         | c1                | c3          |

         +----------------+----------------+

         | 9876543.00 | 9876543.12 | 

        +----------------+-----------------+

        2 rows in set (0.00 sec)

flocatタイプのフィールドは自動的に値を四捨五入しますが、decimalタイプではありません.flocatタイプで金額に関するデータを保存すると問題が発生し、decimalタイプではありません.
例2:decimal(5,2)
mysql> create table t1(id1 float(5,2) default null,id2 double(5,2) default null,
id3 decimal(5,2) default null );

mysql> insert into t1 values(1.2345,1.2345,1.2345);
Query OK, 1 row affected, 1 warning (0.04 sec)

mysql> show warnings;
+-------+------+------------------------------------------+
| Level | Code | Message |
+-------+------+------------------------------------------+
| Note | 1265 | Data truncated for column 'id3' at row 1  |
+-------+------+------------------------------------------+
1 row in set (0.00 sec)

1.2345---小数点以下最大2桁のため、保存は可能で、自動的に四捨五入してデータを遮断して、しかしwaningを報告することができます
12.34 --- OK
1234.5---小数部が2桁未満のため、0を補う.だから保存は1234.50です.だから全体の桁数は5を超えて、新聞を保存して間違っています.
1.2---小数未満の部分は0を補う.1.20で保存します.
デフォルトの状態比較:
浮動小数点数は精度とスケールを書かないと、実際の精度値に従って保存され、精度とスケールがあれば、自動的に四捨五入した結果が挿入され、システムはエラーを報告しません.定点数精度とスケールを書かない場合は、デフォルト値decimal(10,0)で操作し、データが精度とスケール値を超えると、システムがエラーを報告します.