MySQL データ型 DECIMAL の使用方法の詳細な説明

MySQL データ型 DECIMAL の使用方法の詳細な説明

MySQL DECIMALデータ型は、データベースに正確な数値を保存するために使用されます。会計システムの通貨データなど、正確な精度を保持する列には、 DECIMALデータ型がよく使用されます。

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

列名 DECIMAL(P,D);

上記の構文では、

  • Pは有効数字の数を示す精度です。 Pの範囲は1〜65です。
  • D小数点以下の桁数を表します。 Dの範囲は030です。 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という列を定義します。

金額 DECIMAL(6,2);

この例では、 amount列には小数点以下2桁を含む最大6桁を格納できるため、 amount列の範囲は-9999.99から9999.99になります。

MySQL では次の構文が許可されます。

列名 DECIMAL(P);

これは次と同等です:

列名 DECIMAL(P,0);

この場合、列には小数部または小数点は含まれません。

さらに、次の構文を使用することもできます。

列名 DECIMAL;

この場合、 Pのデフォルト値は10です。

MySQL DECIMAL ストレージ

MySQL は整数部分と小数部分に別々にストレージスペースを割り当てます。 MySQL はバイナリ形式を使用してDECIMAL値を保存します。 9桁を4バイトにパックします。

各部分では、 9ビットの数値の各倍数を格納するために4バイトが必要です。残りの数値に必要なストレージは次の表に示されています。

残り数少し
0 0
1–2 1
3~4 2
5~6歳3
7-9 4

たとえば、 DECIMAL(19,9)は小数部に9桁、整数部に19 = 10桁あり、小数部に4バイトが必要です。 整数部分には、最初の9桁に4バイト、残りの1桁に1バイトが必要です。 DECIMAL(19,9)列には合計9バイトが必要です。

MySQL DECIMAL データ型と通貨データ

価格、給与、口座残高などの金銭データでは、多くの場合、 DECIMALデータ型が使用されます。通貨データを扱うデータベースを設計したい場合は、次の構文を参考にしてください。

金額 DECIMAL(19,2);

ただし、一般に認められた会計原則 (GAAP) のルールに準拠する場合は、四捨五入した値が$0.01超えないように、通貨列に少なくとも4桁の小数点以下を含める必要があります。 この場合、小数点以下4桁の列は次のように定義する必要があります。

金額 DECIMAL(19,4);

MySQL DECIMAL データ型の例

まず、 iddescriptioncost 3 つの列を持つtest_orderという新しいテーブルを作成します。

テーブルtest_orderを作成します(
 id INT AUTO_INCREMENT 主キー、
 説明 VARCHAR(255)、
 コスト DECIMAL(19,4) NOT NULL
);

2 番目のステップは、test_order テーブルにデータを挿入することです。

test_orderにINSERT(説明、コスト)
VALUES('自転車', 500.34),('シート',10.23),('休憩',5.21);

3 番目のステップは、test_order テーブルからデータをクエリすることです。

test_orderから*を選択

查詢結果:

ステップ 4. cost列を変更して、 ZEROFILL属性を含めます。

ALTER TABLE test_order
MODIFY コスト DECIMAL(19,4) ゼロフィル;

ステップ 5. test_order テーブルを再度クエリします。

test_orderから*を選択

クエリ結果:

上記のように、出力値には多くのゼロが埋め込まれています。

ゼロフィルのため、負の値を挿入するとエラーが発生します。

test_orderにINSERT(説明、コスト)
VALUES('テスト', -100.11);
<br>ヒント:
[SQL]INSERT INTO test_order(説明、コスト)
VALUES('テスト', -100.11)

[エラー] 1264 - 行 1 の列 'cost' の値が範囲外です

その他の挿入テストの結論:

値が範囲内にあり、小数点以下の桁数がさらにある場合、四捨五入後、余分な小数点以下の桁数は直接切り捨てられます。

値が範囲外の場合、範囲外値エラーが直接報告されます。

MySQL データ型 DECIMAL の詳しい使い方については、これで終わりです。MySQL データ型 DECIMAL の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL における 10 進数型の使用法の簡単な紹介
  • MySQL における Decimal 型と Float Double 型の違い (詳細説明)
  • MySQL データ型 DECIMAL(N,M) における N と M の意味の詳細な説明
  • 科学的記数法の数値文字列を 10 進数型に変換する方法
  • データベースのデータ型 float から C# の型 10 進数への変換、float データ型の変換は無効です
  • MySQL データ型における DECIMAL の使用法の詳細な説明
  • mysql 10進データ型変換の実装
  • MySQL の 10 進数データ型の小数点埋め込み問題の詳細な説明
  • データベースにおける Decimal 型の使用と実装の詳細な説明

<<:  js配列forEachインスタンスの詳細な使用方法

>>:  Windows Server 2016 リモート デスクトップ サービスの構成とライセンスのアクティブ化 (2 ユーザー)

推薦する

nginx がドメイン名アクセス用に設定されている場合にドメイン名の後に 2 つのスラッシュ // が表示される問題の解決方法

最近、個人のウェブサイトを書き直しました。Alibaba Cloudで新しいサーバーを購入しました。...

Vueコンポーネント通信のさまざまな方法の詳細な説明

目次1. 父から息子へ2. 息子から父へ3. 親子関係のないコンポーネントの値の転送4. ヴュークス...

Linux で top コマンドを使用する際のヒント

まず、top のいくつかのフィールドの意味を紹介します。 VIRT:仮想メモリ使用量1. プロセスが...

MacにHomebrewをインストールする際の注意点

最近、Xiao Ming は新しい Mac を購入し、独自のブログ Web サイトを構築したいと考え...

WeChatアプレットは画像コントロールを選択します

この記事の例では、WeChatアプレットで画像コントロールを選択するための具体的なコードを参考までに...

ウェブデザインにおけるグリッドシステム

グリッドシステムの形成1692年、新しく即位したフランス国王ルイ14世は、フランスの印刷技術のレベル...

Mysql通信プロトコルの詳細な説明

1.Mysql接続方法MySQL 通信プロトコルを理解するには、まず MySQL サーバーへの接続に...

WeChatアプレットがスネークゲームを実装

この記事では、参考までに、スネークゲームを実装するためのWeChatアプレットの具体的なコードを紹介...

1つの記事でJavaScript DOM操作の基本を学ぶ

DOM の概念DOM: ドキュメント オブジェクト モデル: ドキュメント オブジェクト モデルは、...

MySQL マルチマスターと 1 スレーブのデータバックアップ方法のチュートリアル

概要いずれかのデータベースに対する操作は他のデータベースに自動的に適用され、2 つのデータベースのデ...

MySQL 5.6 の「暗黙的な変換」によりインデックスが失敗し、データが不正確になる

背景SQL クエリを実行するときに、where 条件の vachar 型フィールドの単一引用符を削除...

WeChatアプレットで画像の幅と高さを取得する方法

起源最近、私は要件 A に取り組んでいます。そこには、次のように記述される小さな機能ポイントがありま...

MySQL の複合インデックスはどのように機能しますか?

目次背景複合インデックスを理解する左端一致原則フィールド順序の影響複合インデックスは単一のインデック...

mysql 8.0.12 winx64 のダウンロードとインストールのチュートリアル

MySQL 8.0.12のダウンロードとインストールのチュートリアルは参考までに、具体的な内容は次の...

Docker-compose ネットワークの詳細な例

今日は Docker でのネットワーク設定を試し、後で忘れないようにプロセスを記録しました。 (シス...