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

推薦する

MySQL マスター/スレーブ データベース同期構成と一般的なエラー

アクセス回数が増えると、時間のかかるデータベース読み取り操作では、データベースへの負荷を軽減するため...

NetEase ブログで使用されているシンプルな Web ページ コード

NetEase Blog でコードを使用する方法: まずブログにログインし、ブログのホームページの左...

MySql のインデックス、ロック、トランザクションの知識ポイントのまとめ

この記事では、MySql のインデックス、ロック、トランザクションに関する知識のポイントをまとめてい...

JavaScript はクラス宝くじアプレットを実装します

この記事では、クラス抽選アプレットを実装するためのJavaScriptの具体的なコードを参考までに紹...

デザインリファレンス 美しく独創的なブログデザイン

以下にリストされているすべてのブログはオリジナルであり、独自にデザインされています。これらは、他者が...

MySQL構成SSL証明書ログインの実装

目次序文1. MySQLはSSL構成を有効にする1.1 SSLが有効になっているかどうかを確認する1...

JS で async と await を使用する方法

目次1. 非同期2. 待つ: 3. 包括的なアプリケーション1. 非同期async 、非同期コードが...

MySQL XA で分散トランザクションを実装する方法

目次序文XA プロトコルMySQL XA で分散トランザクションを実装する方法序文MySQL が単一...

webpackが静的リソースキャッシュを実装する方法

目次導入複数の異なるハッシュを区別するハッシュチャンクハッシュコンテンツハッシュjs キャッシュの実...

Docker で php-nginx-alpine イメージをゼロから構築する方法

これまでにも Docker 環境でいくつかのプロジェクトを実行したことはありますが、まだイメージをよ...

時間のかかるDockerエラーのトラブルシューティングプロセス記録

目次起源環境情報トラブルシューティングのプロセス要約する起源顧客は CentOS をベースにしたカス...

JavaScript はスローモーションアニメーションのカプセル化と使用法を説明します

プロセス分析の実装(1)繰り返して電話をかけるには?答え: 関数をカプセル化して一度だけ呼び出すコー...

Vue はアップロードした画像に透かしを追加できるようになりました (アップグレード版)

vueプロジェクトでは、アップロードした画像に透かしを追加して参照できるようにするアップグレード版...

JavaScript 関数のカリー化

目次1 関数カリー化とは何ですか? 2 カレーの役割と特徴2.1 パラメータの再利用2.2 早期復帰...

Linux での MySQL 5.7.16 無料インストール バージョンのグラフィック チュートリアル

この記事では、参考までにMySQL 5.7.16の無料インストール版のチュートリアルを紹介します。具...