MySQLの DECIMAL
データ型は、正確な値のためにデータベースに格納されています。私たちはしばしばだろうDECIMAL
、列のデータ型は、通貨データの会計システムとして、正確な精度のために予約します。
データ型を定義するにはDECIMAL
、列のを、次の構文を使用します。
1
|
column_name
DECIMAL
(P,D);
|
上記の構文で:
P
精度は、有効桁数です。P
レンジ1〜65
。D
これは、小数点以下の数字です。D
範囲は0
-30
。MySQLは必要D
(以下<=
)P
。
DECIMAL(P,D)
これは、列が格納できることを示しているD
小数のP
桁数を。カラムの実際の範囲は、精度と小数スケールに依存します。
そして、INTデータ型は、DECIMAL
タイプもありUNSIGNED
とZEROFILL
性質。あなたが使用している場合は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つの列を含む新しいテーブルを:id
、description
とcost
。
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
|
他の挿入テストの結果:
その範囲内の値は、より多くの小数点以下は、丸みを帯びた小数点以下の桁は、直接余分を切り捨てられた場合。
値は、値の範囲外にある場合は、範囲外の値は、直接、エラーを報告しました。