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として保存されます。金額データなどで意図した精度を厳密に保持したい場合に、この方法が有効です。
-
MySQLでデータベース内のテーブル数を表示するクエリの書き方
INFORMATION_SCHEMA.TABLESを使ってテーブル数を取得するここでは例として、「WEB」というデータベースを使用しているものとします。このデータベース内に存在するテーブルの総数を調べたい場合、MySQLではINFORMATION_SCHEMA.TABLESを利用するのが便利です。INFORMATION_SCHEMAは、MySQLサーバーが管理しているメタデータ(データベース名、テーブル名、カラム情報など)を格納する仮想データベースであり、これを参照することでスキーマに関する情報をSQLで簡単に取得できます。テーブル数を表示するクエリ「WEB」データベース内のテーブル数を表示す
-
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