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 ユーザー)

推薦する

フォームファイル選択ボックスのスタイルをカスタマイズする例

コードをコピーコードは次のとおりです。 <!DOCTYPE html> <html...

vue3+ts+EsLint+Prettier 標準コード実装

目次使用EsLintの使用プロフィールを追加するPrettierの使用huskyとlint-stag...

Linux 環境の Apache サーバーでセカンダリドメイン名を設定する方法の詳細な説明

この記事では、Linux 環境の Apache サーバーでセカンダリ ドメイン名を構成する方法につい...

大量のデータをMySQLにインポートする際に発生する問題と解決策の分析

プロジェクトでは、SQL を使用してデータ分析を実行するために、大量のデータをデータベースにインポー...

Dockerコンテナを使用する簡単な例

目次1. イメージをプルする2. イメージを実行する3. コンテナ内でアプリケーションをテストする4...

HTML 挿入画像の例 (HTML 追加画像)

HTML に画像を挿入するには、画像を表示するための HTML タグが必要です。これは、img タ...

docker で mysql に接続できない場合の解決策

シナリオ: 仮想マシンの Docker コンテナに最新バージョンの MySQL をインストールした後...

JavaScript の絶妙なスネーク実装プロセス

目次1. HTML構造を作成する2. テーブルを作成する3. ヘビの頭と体を作る4. 食べ物を作る5...

MySQLデータベース設計:Pythonを使ったスキーマ操作方法の詳しい解説

矢が放たれる前に、弓は矢にささやきました。「お前の自由は私のものだ。」スキーマは矢のようなもので、弓...

uniapp 要素ノードスタイルの動的変更の詳細な説明

目次1. スタイル属性をバインドして変更するhtml:対応するjs:達成された効果:次に、refを使...

Vueのデータ応答性原則の詳細な説明

この記事は主に、Vue のレスポンシブ ソース コードを理解していない、または触れたことがない人向け...

Docker を使用した Hadoop クラスターのデプロイに関する詳細なチュートリアル

最近、社内に Hadoop テスト クラスターを構築したいので、docker を使用して Hadoo...

MySQLで置換関数を実装するためのいくつかの実用的なシナリオ

REPLACE構文REPLACE(String,from_str,to_str)つまり、String...

Centos7.5でのIPアドレス設定の実装

1. IPアドレスを設定する前に、まずifconfigを使用してネットワークカード情報を表示し、ネッ...