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 環境変数の設定とシリアル化の詳細な説明

推薦する

Mysql トランザクション分離レベルの読み取りコミットの詳細な説明

MySQL トランザクション分離レベルを表示する mysql> '%isolation...

Vueはvueメタ情報を使用して各ページのタイトルとメタ情報を設定します。

title: vue は vue-meta-info を使用して各ページのタイトルとメタ情報を設定...

Tomcat でよく使われるフィルターの詳細な説明

目次1. クロスドメインフィルタ CorsFilter 1.1 設定例1.2 パラメータの説明2. ...

jQuery はピッカーをシミュレートしてスライド選択効果を実現します

この記事では、スライド選択効果を実現するピッカーをシミュレートするjQueryの具体的なコードを参考...

MySQL クイックデータ比較テクニック

MySQL の運用と保守において、R&D の同僚が 2 つの異なるインスタンスのデータを比較...

VUE ユニアプリライフサイクルに関する簡単な説明

目次1. アプリケーションライフサイクル2. ページのライフサイクルコンポーネントライフサイクル要約...

MySql ストアド プロシージャ パラメータの初歩的な使用法の詳細な説明

パラメータでのストアドプロシージャの使用IN パラメータは、プロシージャに情報を渡すためにのみ使用さ...

VMWare を使用して Windows 上で Linux 環境を構築する手順 (画像とテキスト)

Mac を返却して以来、元のラップトップは使用されていません。このラップトップの構成は非常に良好で...

パズル効果を実現するネイティブ js

この記事では、パズル効果を実現するためのネイティブjsの具体的なコードを参考までに共有します。具体的...

Mysql トランザクションで Update を実行するとテーブルがロックされますか?

2つのケース: 1. 索引あり 2. 索引なし前提条件:方法: コマンドラインを使用してシミュレー...

HTMLエンコードによる文字化け問題について

今日、3年生から質問がありました。彼が書いた HTML コードを開くと、文字化けした文字が表示されま...

CSS の高さの崩壊問題の解決

1. 崩壊度が高いドキュメント フローでは、親要素の高さはデフォルトで子要素によって拡張されます。つ...

nginxを使用して画像サイズを動的に変換し、サムネイルを生成します。

Nginx ngx_http_image_filter_module モジュール (nginx バ...

Dockerコンテナのネットワーク管理とネットワーク分離の実装

1. Dockerネットワーク管理1. Dockerコンテナ方式1) Dockerが外部ネットワーク...

Dockerネットワーク作成に--subnetを追加した後の問題を解決する

Docker ネットワークの作成に –subnet を追加した後、docker network ls...