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

推薦する

コピー&ペーストはパッケージングの敵です

OO、デザイン パターン、および多くのオブジェクト指向の原則について話す前に、まず 1 つのことを習...

Linux システムのユーザー管理コマンドの概要

ユーザーとグループの管理1. ユーザーとグループの基本概念ユーザーとグループ:システム上のすべてのプ...

jQuery キャンバスは QR コード付きのポスターを生成します

この記事では、jQuery キャンバスを使用して QR コード付きのポスターを生成するための具体的な...

mysql コマンドライン スクリプトの実行例

この記事では、例を使用して MySQL コマンドライン スクリプトの実行について説明します。ご参考ま...

CentOS8でのDockerの使い方の詳しい説明

1. CentOS8でのDockerのインストール カール https://download.doc...

JavaScript初心者がよく犯す間違い

目次序文undefined と null の混同紛らわしい数値の加算と文字列の連結戻り文の改行の問題...

JavaScript配列の組み込みメソッドの詳細な説明

目次1. Array.at() 2. Array.copyWithin() 3. 配列.entrie...

Vueはフォーム検証機能を実装します

この記事では主に、NUXT の validate メソッドに基づいてフォーム検証を実装する方法につい...

webpack-dev-server のコア概念とケースの詳細な説明

webpack-dev-server コアコンセプトWebpack の ContentBase と ...

Windows Server 2016 に Docker をインストールするプロセスと発生した問題

前提条件Windows Server でコンテナーを実行するには、Windows Server (半...

Linux での scp および sftp コマンドの詳細な説明

目次序文1. SCPの使用法2. sftpを使用する3. scp と sftp の違いは何ですか?ど...

VMware Workstation 14 Pro(仮想マシン)にシステムをインストールする方法の詳細な説明

この記事では、VMware Workstation 14 Pro (仮想マシン) にシステムをインス...

MySQL テーブルタイプ ストレージエンジンの選択

目次1. 現在のデータベース支出のストレージエンジンを表示する方法1:方法2: 2. ENGINE=...

Vueの学習手順

目次1. v-text (v-instruction name = "variable&q...

MySQL sql_modeの適切な設定に関する詳細な説明

MySQL sql_modeの適切な設定sql_mode は見落とされやすい変数です。デフォルト値は...