詳細な使用MySQLのデータ型DECIMAL

 

MySQLの  DECIMALデータ型は、正確な値のためにデータベースに格納されています。私たちはしばしばだろうDECIMAL、列のデータ型は、通貨データの会計システムとして、正確な精度のために予約します。

データ型を定義するにはDECIMAL、列のを、次の構文を使用します。

1
column_name   DECIMAL (P,D);

上記の構文で:

  • P精度は、有効桁数です。 Pレンジ1〜65
  • Dこれは、小数点以下の数字です。 D範囲は0- 30MySQLは必要D(以下<=P

DECIMAL(P,D)これは、列が格納できることを示しているD小数のP桁数を。カラムの実際の範囲は、精度と小数スケールに依存します。

そして、INTデータ型は、DECIMALタイプもありUNSIGNEDZEROFILL性質。あなたが使用している場合はUNSIGNED財産を、DECIMAL UNSIGNED列は負受け付けません。

場合はZEROFILL、MySQLは満たされた値が表示されます0表示幅では、指定した列で定義されています。私たちがあればまた、DECIMAL列を使用しZERO FILL、MySQLは自動的になりますUNSIGNED列に属性を追加します。

次の例では、使用するDECIMALと呼ばれるデータ型定義amountの列を。

1
amount  DECIMAL (6,2);

この例では、amount列が保存でき6小数点以下の桁数2場所、従って、amount列の範囲からなる-9999.99まで9999.99

MySQLは次の構文を使用できます。

1
column_name  DECIMAL (P);

これはと同等です。

1
column_name  DECIMAL (P,0);

この場合、列は、10進数または小数部分が含まれています。

また、私たちも、次の構文を使用することができます。

1
column_name  DECIMAL ;

この場合、Pデフォルト値10

MySQLのストレージDECIMAL

MySQLの整数と小数部分は収納スペースが割り当てられています。MySQLは、ストアへのバイナリフォーマット使用するDECIMAL値を。9詰め桁4バイト。

セクションごとに、必要である4格納するバイト9各複数のビットを。以下の表に格納するために必要な残りの桁。

残りの数字
0 0
1-2 1
3-4 2
5-6 3
7-9 4

例えば、DECIMAL(19,9)小数部分を有するための9整数部に対して、桁19ビット=  10桁の10進一部必要4バイト。整数の最初の部分のために9必要な桁4バイト、1残りへの2つのバイトを1バイト。DECIMAL(19,9)列の合計9バイト数。

MySQLのDECIMALデータ型や通貨データ

頻繁に使用するDECIMALようにように物価、賃金、口座残高やなどの通貨データ型を、。データベースが金融データを扱う設計されている場合は、次の構文を参照することができます-

1
amount  DECIMAL (19,2);

あなたは、一般的に認められた会計原則(GAAP)の規則に準拠したい場合は、通貨列が少なくとも含まれている必要があり4、その値は超えていないことを確認するために丸め、小数$0.01この場合、それはで定義されている必要があり4、次のように列の小数点以下の桁数:

1
amount  DECIMAL (19,4);

 

例のデータ型MySQLのDECIMAL

まず、名前のファイル作成test_orderの3つの列を含む新しいテーブルを:iddescriptioncost

1
2
3
4
5
CREATE  TABLE  test_order (
     id  INT  AUTO_INCREMENT  PRIMARY  KEY ,
     description  VARCHAR (255),
     cost  DECIMAL (19,4)  NOT  NULL
);

  

第二ステップでは、データはtest_orderテーブルに挿入されます。

1
2
INSERT  INTO  test_order(description,cost)
VALUES ( 'Bicycle' , 500.34),( 'Seat' ,10.23),( 'Break' ,5.21);
 

第三のステップ test_orderテーブルクエリデータから、。

1
SELECT  from  test_order
查询结果:
 

 

第四段階は、変更costが含まれる列ZEROFILLの属性を。

1
2
ALTER  TABLE  test_order
MODIFY  cost  DECIMAL (19,4) zerofill;
 

第五工程、再びクエリtest_orderテーブル。

1
SELECT  from  test_order

クエリ結果

 

 

上記から分かるように、多くは、出力値のゼロで埋め。

 

ZEROFILLので、我々は挿入負の値は文句を言うでしょう。

1
2
3
4
5
6
7
INSERT  INTO  test_order(description,cost)
VALUES ( 'test' , -100.11);
<br>提示:
[SQL] INSERT  INTO  test_order(description,cost)
VALUES ( 'test' , -100.11)
 
[Err] 1264 -  Out  of  range value  for  column  'cost'  at  row 1

  

他の挿入テストの結果:

その範囲内の値は、より多くの小数点以下は、丸みを帯びた小数点以下の桁は、直接余分を切り捨てられた場合。

値は、値の範囲外にある場合は、範囲外の値は、直接、エラーを報告しました。

おすすめ

転載: www.cnblogs.com/mark5/p/11205815.html