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 でパンくず関数コンポーネントをカプセル化するいくつかの方法

推薦する

Vue 3.0 カスタムディレクティブの使い方

目次1. カスタム指示1. グローバルカスタム指示を登録する2. グローバルカスタム指示を使用する3...

.Net Core を使用して数千万のデータを MySQL にインポートする手順

目次事前準備実施方法: 1. 単一のデータを挿入する2. マージデータ挿入3. MySqlBulkL...

MySQL の int、char、varchar のパフォーマンスを比較する

インターネットには、真実のように見える「噂」がたくさんあります。もちろん、悪意のあるものではありませ...

Linux で lvm 論理ボリューム パーティションのサイズを調整するチュートリアル (xfs や ext4 などのさまざまなファイル システム用)

序文システムをインストールしたときに、パーティション領域を適切に割り当てませんでした。その後のメンテ...

CSSインジェクションの知識の要約

最近のブラウザでは、CSS 内で JavaScript を実行することはできなくなりました。以前は、...

Docker実行コンテナが作成状態にある問題についての簡単な説明

最近の問題としては、次のような現象があります。システムには、docker run コマンドを継続的に...

システムエラー 1067 を解決するための MySQL データベース グリーン バージョンのインストール チュートリアル

ソフトウェアのグリーンバージョンとインストールバージョンの違いは何ですか?通常、ファイルのインストー...

クラウドネイティブテクノロジーKubernetesスケジューリングユニットポッドの使用の詳細な説明

k8s の最小のスケジューリング単位 --- pod前回の記事では、k8s が解決できる問題を簡単に...

MySQL5.7 mysqldump バックアップとリカバリの実装

MySQL バックアップコールドバックアップ:停止服務進行備份,即停止數據庫的寫入ホットバックアップ...

Dockerを使用してJenkinsをインストールする方法

目次1. イメージをプルする2. ローカルデータボリュームを作成する3. コンテナを作成する4. J...

MySQL データベース データのロード 複数の用途

目次MySQL Load Dataの多様な用途1. LOAD の基本的な背景2. 基本パラメータをロ...

...

LinuxでのDNSサーバーの設定の詳細な説明

1. DNSサーバーの概念インターネットでの通信には IP アドレスの助けが必要ですが、数字に対する...

Kali Linux インストール VMware ツールのインストール プロセスと VM インストール vmtools ボタン グレー

Xiaobai は vmtools のインストールを記録します。 1. 意義と機能: VMWARE ...

CSSレイアウトで中央揃えレイアウトを実現する方法

1. 親コンテナーをテーブルに設定し、子をインライン要素に設定します。テキストを表示するサブコンテン...