MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLデータベースへの挿入時にdecimal(19,2)の値が変わる?truncate()で正確な値を保存する方法

decimal(19,2)の値が変わる原因と対処法

MySQLのDECIMAL(19,2)型カラムに値を直接挿入すると、小数点以下3桁目が四捨五入され、元の値と異なる数値が保存されることがあります。正確な実数値をそのまま保存したい場合は、truncate()関数を使って小数点以下2桁で切り捨ててから挿入します。

テーブルの作成

まず、以下のクエリでテーブルを作成します。

mysql> create table demo59
-> (
-> price decimal(19,2)
-> );
Query OK, 0 rows affected (1.12 sec)

レコードの挿入

次に、insertコマンドとtruncate()関数を組み合わせて、レコードを挿入します。

mysql> insert into demo59 values(truncate(15.346, 2));
Query OK, 1 row affected (0.14 sec)

mysql> insert into demo59 values(truncate(20.379, 2));
Query OK, 1 row affected (0.72 sec)

mysql> insert into demo59 values(truncate(25.555, 2));
Query OK, 1 row affected (0.16 sec)

mysql> insert into demo59 values(truncate(100.456, 2));
Query OK, 1 row affected (0.21 sec)

レコードの確認

select文を使って、テーブル内のレコードを表示します。

mysql> select *from demo59;

実行すると、以下のような出力が得られます。

+--------+
| price |
+--------+
| 15.34 |
| 20.37 |
| 25.55 |
| 100.45 |
+--------+
4 rows in set (0.00 sec)

補足:truncate()と四捨五入の違い

truncate()を使わずに直接挿入した場合、例えば15.346は四捨五入されて15.35として保存されます。一方、truncate(値, 2)は小数点以下3桁目以降を単純に切り捨てるため、15.34として保存されます。金額データなどで意図した精度を厳密に保持したい場合に、この方法が有効です。

  1. MySQLでデータベース内のテーブル数を表示するクエリの書き方

    INFORMATION_SCHEMA.TABLESを使ってテーブル数を取得するここでは例として、「WEB」というデータベースを使用しているものとします。このデータベース内に存在するテーブルの総数を調べたい場合、MySQLではINFORMATION_SCHEMA.TABLESを利用するのが便利です。INFORMATION_SCHEMAは、MySQLサーバーが管理しているメタデータ(データベース名、テーブル名、カラム情報など)を格納する仮想データベースであり、これを参照することでスキーマに関する情報をSQLで簡単に取得できます。テーブル数を表示するクエリ「WEB」データベース内のテーブル数を表示す

  2. JavaでMySQLデータベースにNULL値を挿入する方法

    JavaからデータベースにNULL値を挿入したいケースはよくあります。その場合、PreparedStatementのsetNull()メソッドを使用します。基本的な構文は以下の通りです。ps.setNull(インデックス番号, Types.NULL);この記事では、実際にサンプルを通してNULL値の挿入手順を解説します。1. テーブルの作成まず、MySQLでテスト用のテーブルを作成します。mysql> create table DemoTable1893 ( FirstName varchar(20) ); Query OK, 0 rows affected (0