MySQL データ型 DECIMAL の詳細な分析

MySQL データ型 DECIMAL の詳細な分析

序文:

金額の保存など、小数点数を保存し、精度要件がある場合、通常は DECIMAL フィールド タイプの使用を検討します。おそらく、ほとんどの学生は DECIMAL タイプについて少ししか理解しておらず、詳細はあまり明確ではありません。この記事では、最初から DECIMAL フィールド タイプの使用シナリオと方法について説明します。

1. DECIMAL型の紹介

DECIMAL は MySQL 5.1 で導入されました。列宣言構文は DECIMAL(M,D) です。 NUMERIC は DECIMAL と同義です。フィールド タイプが NUMERIC として定義されている場合、自動的に DECIMAL に変換されます。

宣言構文 DECIMAL(M,D) の場合、独立変数の値の範囲は次のとおりです。

  • M は最大桁数 (精度) で、範囲は 1 ~ 65 です。この値は指定しないでおくことができます。デフォルト値は 10 です。
  • D は小数点の右側の桁数(小数点以下の桁数)です。範囲は 0 ~ 30 で、M を超えることはできません。指定しない場合はデフォルト値は 0 になります。

たとえば、給与のDECIMAL(5,2)フィールドには、5桁と小数点以下2桁の任意の値を格納できるため、給与列に格納できる値の範囲は-999.99〜999.99になります。

2. DECIMALの実際の使用

次に、DECIMAL フィールド タイプの使用を確認するためのテスト テーブルを作成します。

# DECIMALフィールドを持つテーブルを作成し、decimalのデフォルト値がdecimal(10,0)であることを確認します。
mysql> テーブルdecimal_tbを作成します(col1decimal、col2decimal(5,2));
クエリは正常、影響を受けた行は 0 行 (0.04 秒)
mysql> テーブル作成を表示decimal_tb\G
************************** 1. 行 ****************************
    テーブル:decimal_tb
テーブルの作成: CREATE TABLE `decimal_tb` (
 `col1` 小数点(10,0) デフォルト NULL,
 `col2` 小数点(5,2) デフォルト NULL
) エンジン=InnoDB デフォルト文字セット=utf8
セット内の 1 行 (0.00 秒)

# データ挿入テスト# 結論: 保存範囲を超えると、エラーが報告されます。小数点以下の桁数が足りない場合は、0 が自動的に追加されます。最初の桁が 0 の場合は、自動的に無視されます。小数点以下の桁数が範囲を超えると、数値は切り捨てられ、四捨五入されます。
mysql>decimal_tb (col1,col2) に値 (100,100) を挿入します。
クエリは正常、1 行が影響を受けました (0.05 秒)
mysql>decimal_tb(col2)の値(1.23)に挿入します。
クエリは正常、1 行が影響を受けました (0.01 秒)
mysql>decimal_tb(col2)の値(10.2)に挿入します。
クエリは正常、1 行が影響を受けました (0.01 秒)
mysql>decimal_tb(col2)の値(09.9)に挿入します。
クエリは正常、1 行が影響を受けました (0.01 秒)
mysql>decimal_tbから*を選択します。
+------+--------+
| 列1 | 列2 |
+------+--------+
| 100 | 100.00 |
| NULL | 1.23 |
| NULL | 10.20 |
| NULL | 9.90 |
+------+--------+
セット内の 4 行 (0.00 秒)
mysql>decimal_tb(col2)の値(9999)に挿入します。
エラー 1264 (22003): 行 1 の列 'col2' の値が範囲外です
mysql>decimal_tb (col2) に値 (12.233) を挿入します。 
クエリは正常、1 行が影響を受け、1 つの警告 (0.01 秒)
mysql> 警告を表示します。
+-------+------+--------------------------------------------------------+
| レベル | コード | メッセージ |
+-------+------+--------------------------------------------------------+
| 注意 | 1265 | 行 1 の列 'col2' のデータが切り捨てられました |
+-------+------+--------------------------------------------------------+
セット内の 1 行 (0.00 秒)
mysql>decimal_tb (col2) に値 (12.2300) を挿入します。
クエリは正常、1 行が影響を受けました (0.01 秒)

# 変数範囲テスト# 結論: M の範囲は 1 から 65、D の範囲は 0 から 30、D は M より大きくない
mysql> テーブルdecimal_tbを変更し、列col3decimal(6,6)を追加します。
クエリは正常、影響を受けた行は 0 行 (0.12 秒)
レコード: 0 重複: 0 警告: 0
mysql> テーブルdecimal_tbを変更し、列col4decimal(6,7)を追加します。 
エラー 1427 (42000): float(M,D)、double(M,D)、またはdecimal(M,D) の場合、M は >= D (列 'col4') である必要があります。
mysql> テーブルdecimal_tbを変更し、列col4decimal(65,2)を追加します。
クエリは正常、影響を受けた行は 0 行 (0.11 秒)
レコード: 0 重複: 0 警告: 0
mysql> テーブルdecimal_tbを変更し、列col4decimal(66,2)を追加します。
エラー 1426 (42000): 'col4' に指定された精度 66 は大きすぎます。最大値は 65 です。
mysql> テーブルdecimal_tbを変更し、列col5をdecimal(60,30)に追加します。 
クエリは正常、影響を受けた行は 0 行 (0.13 秒)
レコード: 0 重複: 0 警告: 0
mysql> テーブルdecimal_tbを変更し、列col6decimal(60,31)を追加します。
エラー 1425 (42000): 列 'col6' に指定されたスケール 31 は大きすぎます。最大値は 30 です。

3. DECIMALの使用法のまとめ

上記の内容では、実用的な観点からDECIMAL型の使い方と注意事項を紹介しました。floatやdoubleなどの浮動小数点型も小数を格納できることはご存知かもしれませんが、ここでは詳しく紹介しません。float型とdouble型は、特に合計計算を行うときに正確さを保証できず、エラーが発生しやすいことを思い出してください。したがって、小数を格納する場合、特に金額が関係する場合は、DECIMAL型を使用することをお勧めします。 DECIMAL を使用する際に注意すべき点を以下にまとめます。

  • DECIMAL(M,D) では、M の範囲は 1 ~ 65、D の範囲は 0 ~ 30 です。
  • M のデフォルト値は 10、D のデフォルト値は 0 であり、D は M より大きくありません。
  • DECIMAL(5,2)の保存範囲は-999.99~999.99です。保存範囲を超えるとエラーが報告されます。
  • 値を保存するときに、小数点以下の桁数が足りない場合は自動的に 0 が補われ、最初の桁が 0 の場合は自動的に無視されます。
  • 数値が小数点を超える場合は切り捨てられ、アラームが生成され、数値は切り上げられます。
  • DECIMAL フィールドを使用する場合は、M および D パラメータを手動で指定し、必要に応じて割り当てることをお勧めします。

要約:

この記事は比較的シンプルで実用的です。これを読めば、DECIMAL フィールドの使用シナリオと注意事項が理解できるでしょう。実際、一般的なフィールド タイプについては、使用シナリオと注意事項を理解するだけで十分です。テーブルを作成するときの目標は、適切なフィールド タイプをすばやく選択できるようにすることです。たとえば、小数を格納する必要がある場合は、DECIMAL タイプを使用し、ビジネス ニーズに応じて適切な精度を選択すれば、作業が簡単になります。

上記は、MySQL データ型 DECIMAL の詳細な分析の内容です。MySQL データ型 DECIMAL の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL の 10 進数データ型の小数点埋め込み問題の詳細な説明
  • MySQL 10進数符号なし更新負数を0に変換
  • MySQL の 3 つの浮動小数点型 (float、double、decimal) の違いと概要について簡単に説明します。
  • MySQL における 10 進数型の使用法の簡単な紹介
  • MySQL データ型 DECIMAL(N,M) における N と M の意味の詳細な説明
  • MySQL データ型における DECIMAL の使用法の詳細な説明
  • MySQL における Decimal 型と Float Double 型の違い (詳細説明)
  • MySQL データ型 DECIMAL の使用方法の詳細な説明

<<:  Linux で xargs コマンドを使用する詳細なチュートリアル

>>:  Vue3 でパンくず関数コンポーネントをカプセル化するいくつかの方法

推薦する

さまざまなReact状態マネージャーの解釈と使用方法

まず、状態マネージャーとは何か、そしてそれが何をするのかを知る必要があります。複数のページで同じプロ...

MySQL に接続されている IP アドレスを表示する方法の例

具体的な方法:まずコマンドプロンプトを開きます。次に、[ mysql -u root -p ] コマ...

ActiveMQ メッセージ サービスを構築するための Docker 学習方法の手順

序文ActiveMQ は、Apache が開発した最も人気があり強力なオープン ソース メッセージ ...

Windows での PyTorch 開発環境のインストール チュートリアル

アナコンダのインストールAnaconda は、Python の使用を容易にするために作成されたソフト...

Vue ライフサイクルの紹介とフック関数の詳細な説明

目次Vueライフサイクルの紹介とフック機能VUEライフサイクルフックVue ライフサイクルの紹介作成...

MySQL 学習のまとめ: InnoDB ストレージ エンジンのアーキテクチャ設計の予備的な理解

1. ストレージエンジン前のセクションでは、SQL 実行プランは、エグゼキュータ コンポーネントがス...

Tomcat が https アクセスをサポートするための手順の説明

tomcat を https アクセスに対応させる方法ステップ: (1)キーストアファイルを生成する...

HTML マークアップ言語 - フォーム

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

fileReader 使用時の落とし穴と解決策

目次fileReader に関する落とし穴iOS における FileReader の落とし穴 (イメ...

Nginx における 2 つの現在の制限方法についての簡単な説明

負荷は通常、システム設計時に予測されます。システムがパブリック ネットワークに公開されている場合、悪...

XHTMLタグは適切に使用する必要があります

<br />123WORDPRESS.COM の以前のチュートリアルでは、Web ページ...

Centos7 で mysqldump を使用して MySQL データベースの毎日の自動バックアップを作成する

1. 要件:データベースのバックアップは、実稼働環境にとって特に重要です。データベースのバックアップ...

JS で単一ファイルコンポーネントを実装する方法

目次概要単一ファイルコンポーネント基本概念シンプルなローダーコンポーネントコンテンツの解析コンポーネ...

Vue で Google サードパーティ ログインを実装するためのサンプル コード

目次1. 開発者プラットフォームの構成問題を解決する1. 開発者プラットフォームの構成1. 開発者プ...

CentOS7.x のアンインストールとインストール MySQL5.7 の操作手順とエンコード形式の変更方法

1. MySQL 5.7 のアンインストール1.1查看yum是否安裝過mysql CD yum li...