MySQL データ型 DECIMAL(N,M) における N と M の意味の詳細な説明

MySQL データ型 DECIMAL(N,M) における N と M の意味の詳細な説明

同僚から、MySQL データ型 DECIMAL(N,M) の N と M の意味を尋ねられました。言うまでもなく、M は小数点以下の桁数ですが、この N は小数点前の最大桁数ですか、それとも小数部を追加した後の最大桁数ですか?本当に思い出せないんです。そこで、検証するためにテスト テーブルを作成しました。結果は次のとおりです。

テストテーブル、seller_costフィールドはdecimal(14,2)として定義されています。

テーブル `test_decimal` を作成します (
 `id` int(11) NULLではない、
 `seller_cost` 小数点(14,2) デフォルト NULL
) エンジン=InnoDB デフォルト文字セット=utf8

最初、テーブルは空です。

mysql> test_decimal から * を選択します。
空のセット (0.00 秒)

整数部分の長さが 14 の数値を挿入すると、列範囲を超えたというエラーが発生します。

mysql> test_decimal(id,seller_cost) に値(1,12345678901234) を挿入します。
エラー 1264 (22003): 行 1 の列 'seller_cost' の値が範囲外です

整数部分の長さが12の数字を挿入すると正しく挿入できます

mysql> test_decimal(id,seller_cost) に値(1,123456789012) を挿入します。
クエリは正常、1 行が影響を受けました (0.00 秒)

テーブルをクエリすると、MySQL が挿入された整数値の末尾に小数点 2 桁の ".00" を追加していることがわかります。

mysql> test_decimal から * を選択します。
+----+-----------------+
| ID | 販売コスト |
+----+-----------------+
| 1 | 123456789012.00 |
+----+-----------------+
セット内の 1 行 (0.00 秒)

整数部に 12 桁、小数部に 5 桁の数字を挿入し続けます。数字は正常に挿入されますが、警告が表示されます。警告は、小数部が小数点以下 2 桁に切り捨てられたことを示します。

mysql> test_decimal(id,seller_cost) に値(1,123456789012.12345) を挿入します。
クエリは正常、1 行が影響を受け、1 つの警告 (0.00 秒)
 
mysql> 警告を表示します。
+-------+------+--------------------------------------------------+
| レベル | コード | メッセージ |
+-------+------+--------------------------------------------------+
| 注意 | 1265 | 行 1 の列 'seller_cost' のデータが切り捨てられました |
+-------+------+--------------------------------------------------+
セット内の 1 行 (0.00 秒)
 
mysql> test_decimal から * を選択します。
+----+-----------------+
| ID | 販売コスト |
+----+-----------------+
| 1 | 123456789012.00 |
| 1 | 123456789012.12 |
+----+-----------------+
セット内の 2 行 (0.00 秒)

整数部分の長さは 2 に短縮され、小数部分の長さは 5 のままです。挿入は成功しますが、小数部分は 2 桁に切り捨てられます。

mysql> test_decimal(id,seller_cost) に値(1,12.12345) を挿入します。
クエリは正常、1 行が影響を受け、1 つの警告 (0.00 秒)
 
mysql> 警告を表示します。
+-------+------+--------------------------------------------------+
| レベル | コード | メッセージ |
+-------+------+--------------------------------------------------+
| 注意 | 1265 | 行 1 の列 'seller_cost' のデータが切り捨てられました |
+-------+------+--------------------------------------------------+
セット内の 1 行 (0.00 秒)
 
mysql> test_decimal から * を選択します。
+----+-----------------+
| ID | 販売コスト |
+----+-----------------+
| 1 | 123456789012.00 |
| 1 | 123456789012.12 |
| 1 | 12.12 |
+----+-----------------+
セット内の 3 行 (0.00 秒)

小数点以下 2 桁の数字を挿入し続けます。正しく挿入され、小数点以下は自動的に 2 桁に切り上げられます。

mysql> test_decimal(id,seller_cost) に値(1,12.1) を挿入します。
クエリは正常、1 行が影響を受けました (0.00 秒)
 
mysql> test_decimal から * を選択します。
+----+-----------------+
| ID | 販売コスト |
+----+-----------------+
| 1 | 123456789012.00 |
| 1 | 123456789012.12 |
| 1 | 12.12 |
| 1 | 12.10 |
+----+-----------------+
セット内の 4 行 (0.00 秒)

要約すると、DECIMAL(N,M) の M 値は小数点以下の桁数です。挿入された値に小数部が指定されていない場合、または小数部が M 桁未満の場合、小数点以下の M 桁に自動的に埋め込まれます。挿入された値の小数部が M を超える場合、小数部は切り捨てられ、最初の M 桁の小数部が切り捨てられます。 N は整数部分と小数部分の合計の長さです。つまり、挿入される数値の整数部分は NM 桁を超えることはできません。そうでない場合、正常に挿入できず、範囲外エラーが報告されます。

要約する

以上が、MySQL データ型 DECIMAL(N,M) における N と M の意味の詳細な説明に関するこの記事の内容のすべてです。皆様のお役に立てれば幸いです。興味のある方は、引き続きこのサイトを参照してください: MySQL での or ステートメントの使用例、Redis と MySQL の違いの簡単な説明など。ご質問がある場合は、いつでもメッセージを残していただければ、編集者がすぐに返信いたします。このサイトをサポートしてくれた友人たちに感謝します!

以下もご興味があるかもしれません:
  • MySQL における 10 進数型の使用法の簡単な紹介
  • MySQL における Decimal 型と Float Double 型の違い (詳細説明)
  • 科学的記数法の数値文字列を 10 進数型に変換する方法
  • データベースのデータ型 float から C# の型 10 進数への変換、float データ型の変換は無効です
  • MySQL データ型における DECIMAL の使用法の詳細な説明
  • mysql 10進データ型変換の実装
  • MySQL の 10 進数データ型の小数点埋め込み問題の詳細な説明
  • MySQL データ型 DECIMAL の使用方法の詳細な説明
  • データベースにおける Decimal 型の使用と実装の詳細な説明

<<:  VMware Workstation のインストール Linux (Ubuntu) システム

>>:  WeChatアプレットがフォーム検証を実装

ブログ    

推薦する

Webフロントエンド開発におけるエラーを見つけるための基本的な考え方

WEB開発は主に2つのインタラクション(B/Sデータ)から構成されますブラウザ: 1html、css...

winx64 での mysql5.7.19 の基本的なインストール プロセス (詳細)

1. ダウンロード参考: https://www.jb51.net/softs/451120.ht...

ウェブページの右下隅に「いいね!」カード効果を実現するための CSS (サンプルコード)

効果 HTML を実装するには、まずクリーンな HTML ページを準備し、ノードを記述します。 &l...

ウェブページを白黒に変換します(Google、Firefox、IE、その他のブラウザと互換性があります)

CSSファイルに書き込むコードをコピーコードは次のとおりです。 01.html {グレイスケール(1...

Vue は Tencent TIM インスタント メッセージングを統合します

この記事では主に、Tencent TIM インスタント メッセージングを Vue と統合する方法を紹...

HTML タグ sup と sub の応用の紹介

HTML タグ: 上付き文字HTML では、<sup> タグは上付き文字のテキストを定義...

vue の v-bind を理解する

目次1. v-bindの主要ソースコードの分析1. v-bind属性はどこに均一に保存されるか: a...

Windows で MySQL のルート パスワードを忘れた場合にリセットする方法

私のマシン環境: Windows 2008 R2 MySQL 5.6 Baidu で「Windows...

Windows10のマウスを模倣して境界線を光らせる効果を実現するCSSの詳細解説

最新の Windows 10 アップデートをインストールした後、システム UI の詳細な効果が顕著に...

Redhat 7.3 に MySQL 8.0.22 をインストールするための詳細なチュートリアル (バイナリ インストール)

目次1. MySQLインストールパッケージをダウンロードする2. MySQLのアンインストール手順3...

CentOS 6.5 に MySQL 5.6 をインストールするチュートリアル

1. Linuxに対応するRPMパッケージをダウンロードする5.6 より前のバージョンhttp://...

VMware を使用して PXE バッチ インストール サーバーをテストする詳細なプロセス

目次1. 準備1. 環境を整える2. インストール方法3. ネットワークカードの構成2. インストー...

Nodeはリクエスト追跡にasync_hooksモジュールを使用します

async_hooks モジュールは、Node.js バージョン 8.0.0 に正式に追加された実験...

Vuex のコアコンセプトと基本的な使用法の詳細な説明

目次導入始めるインストール①直接ダウンロードする方法②CND法③NPM方式④糸法NPMインストールの...

Linux の検索ツールの代替となるフレンドリーなツール

find コマンドは、指定されたディレクトリ内のファイルを検索するために使用されます。引数の前の文字...