MySQL における Decimal 型と Float Double 型の違い (詳細説明)

MySQL における Decimal 型と Float Double 型の違い (詳細説明)

MySQL には、10 進数などの標準データ型だけでなく、float や double などの非標準データ型もあります。

違いは、float や double などの非標準型は DB に近似値を格納するのに対し、Decimal は数値を文字列の形式で格納することです。
float 型と double 型は浮動小数点数 (つまり 10 進数型) を格納できますが、float 型には欠点があります。指定したデータが整数の場合、整数として扱われます。このように、通貨の値を保存したりアクセスしたりするときに、当然問題が発生します。デフォルト値は 0.00 ですが、実際の保存量は 0 です。同様に、通貨を 12.00 として入金してアクセスすると、実際の保存量は 12 になります。

幸いなことに、MySQL は 2 つのデータ型、10 進数を提供しており、これにより上記の問題を簡単に解決できます。10 進数型は MySQL によって SQL92 標準で許可されているのと同じ型で実装されています。お金に関連するデータなど、正確な精度が重要な値を保存するために使用されます。

データ定義

float(M,S) Mは合計の長さ、Sは小数点以下の長さです。インターネット上には不正確な例が多数ありますが、次のようにコピーします。

mysql> テーブル t1(c1 float(10,2), c3 小数点以下(10,2)) を作成します。

クエリは正常、影響を受けた行は 0 行 (0.02 秒)

mysql> t1 に値 (9876543.21, 9876543.12) を挿入します。

クエリは正常、1 行が影響を受けました (0.00 秒)

mysql> t1 から * を選択します。

+----------------+-----------------+

| c1 | c3 |

+----------------+-----------------+

| 9876543.00 | 9876543.12 |

+----------------+------------------+

セット内の 2 行 (0.00 秒)

別の例: DECIMAL(5,2)

mysql>テーブル t1(id1 float(5,2) デフォルト null、id2 double(5,2) デフォルト null、
id3 10進数(5,2) デフォルトはnull);

mysql> t1 に値 (1.2345,1.2345,1.2345) を挿入します。
クエリは正常、1 行が影響を受け、1 つの警告 (0.04 秒)

mysql> 警告を表示します。
+-------+------+------------------------------------------+
| レベル | コード | メッセージ |
+-------+------+------------------------------------------+
| 注意 | 1265 |行 1 の列 'id3' のデータが切り捨てられました|
+-------+------+------------------------------------------+
セット内の 1 行 (0.00 秒)

1.2345 --- 小数点以下は最大2桁なので保存可能で、データは自動的に切り捨てられるが、減少が報告される

12.34 --- 了解

1234.5 --- 小数点部分が 2 桁未満なので、0 を埋め込む必要があります。したがって、1234.50 として保存する必要があります。そのため、合計桁数が 5 を超え、保存時にエラーが報告されます。

1.2 --- 小数点部分を0で埋めます。 1.20 に従って保存します。

デフォルト状態の比較

浮動小数点数の場合、経度とスケールが書き込まれていない場合は、実際の精度値に従って保存されます。精度とスケールが書き込まれている場合は、丸められた結果が自動的に挿入され、システムはエラーを報告しません。固定小数点数の場合、精度とスケールが書き込まれていない場合は、デフォルト値の 10 進数 (10,0) が使用されます。データが精度とスケールの値を超えると、システムはエラーを報告します。

MySQLのDecimal型とFloat Doubleの違い(詳細説明)に関する上記の記事は、編集者があなたと共有するすべての内容です。参考になれば幸いです。また、123WORDPRESS.COMを応援していただければ幸いです。

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

<<:  Tencent Cloud Server Centosにデータディスクをマウントする方法

>>:  Nest.js 環境変数の設定とシリアル化の詳細な説明

推薦する

vue3 タイムスタンプ変換 (フィルターを使用せずに)

vue2 では、タイムスタンプを変換するときに、通常はフィルターを使用します。vue3 以降では、...

Node.js での SerialPort モジュールの使用

目次目的モジュールのインストール基本的な使い方ポートをスキャンする開いているポートデータの送信データ...

MySQL inndbジョイントインデックスを正しく使用する方法を徹底的に理解するためのケーススタディ

最近確認された5件のデータを照会するビジネスがあります。 `id`、`title` を選択 `th_...

MySQL ログイン エラーを解決する: 'ユーザー 'root'@'localhost' へのアクセスが拒否されました

まず、コマンドラインまたはワークベンチを使用して MySQL にログインできず、「ユーザー '...

CSS フィルターを使用してマウスオーバー効果を記述する例

CSSフィルターを使用してマウスオーバー効果を記述する <div class="fi...

TLS暗号化通信を使用してDockerにリモート接続する詳細な例

デフォルトでは、Docker はネットワーク化されていない UNIX ソケット上で実行されます。オプ...

CSS で 3D ブック効果を実装するためのサンプル コード

さっそく、レンダリングを見てみましょうソースコードは以下のとおりです <!DOCTYPE ht...

Nodejs モジュール システムのソースコード分析

目次概要CommonJS 仕様Node の CommonJS 仕様の実装モジュールのエクスポートとイ...

XHTMLにおけるH1タグの位置について

最近、H1 については多くの議論が行われていますが (記事のコンテンツ ページ内)、おおよそ 2 つ...

Docker MQTT のインストールと使用のチュートリアル

MQTT の紹介MQTT (Message Queuing Telemetry Transport)...

HTML チュートリアル: よく使われる HTML タグのコレクション (5)

導入された HTML タグは、必ずしも XHTML 仕様に完全に準拠しているわけではありません。実際...

データベース管理における 19 の MySQL 最適化方法

MySQL データベースを最適化すると、データベースの冗長性を削減できるだけでなく、データベースの実...

CSS でレスポンシブ レイアウトを実装する方法

CSS でレスポンシブ レイアウトを実装するレスポンシブレイアウトは非常にハイエンドで難しいように思...

IE6/7 で絶対配置された要素が不可解に消えたりブロックされたりする問題を解決する方法

1. 絶対配置レイヤーの隣接フローティング レイヤーの幅が親レイヤーの幅と等しくなく、フロートがクリ...