web-dev-qa-db-ja.com

MysqlDataTruncation:データの切り捨て:行1の列 'column'の値が範囲外です

JavaとMySQLを使用しています。テーブルに値を挿入しようとしています。

挿入すると、次の例外が発生します。

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of 
range value for column 'idPxxx' at row 1

挿入の5%だけがこの例外を生成し、他は機能します。エラーの意味とその回避方法を教えてください。

11
Khaledez

これは、idPxxxに格納しているデータが適合しないことを意味します。たとえば、文字列が長すぎるか、数値が大きすぎる可能性があります。

idPxxxのデータ型は何ですか?そして、あなたはそれに何を保存しようとしていますか?

14
Ariel

MySQLコンソールでこの例外を生成する方法:

mysql> create table penguin (mydecimal decimal(9,8));
Query OK, 0 rows affected (0.02 sec)

mysql> insert into penguin values (1234.1234);
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> show warnings;
+---------+------+----------------------------------------------------+
| Level   | Code | Message                                            |
+---------+------+----------------------------------------------------+
| Warning | 1264 | Out of range value for column 'mydecimal' at row 1 |
+---------+------+----------------------------------------------------+
1 row in set (0.00 sec)

mysql> select * from penguin;
+------------+
| mydecimal  |
+------------+
| 9.99999999 |
+------------+
1 row in set (0.00 sec)

最大9.9回の繰り返しが可能な列に1234を詰め込もうとしました。行がまだ挿入されていることに注意してください。

MySQLコンソールを取得して、strictモードを使用してこの変換を防ぐことができます:

mysql> set sql_mode=STRICT_ALL_TABLES;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into penguin values (5678.5678);
ERROR 1264 (22003): Out of range value for column 'mydecimal' at row 1

ペンギンに2番目の行を追加しようとして、挿入コマンドが失敗しました:

mysql> select * from penguin;
+------------+
| mydecimal  |
+------------+
| 9.99999999 |
+------------+
1 row in set (0.00 sec)

ソリューション

  1. 列のデータ型のサイズを拡張して、そこに入力した値を受け入れます。
  2. 詰め込もうとしている値のサイズを小さなデータ型に縮小します。
3
Eric Leschinski

私にとって問題は符号なしのデータ型でした。フラグを削除すると問題が解決しました。

0
Ali786

このタイプのエラーメッセージは、さまざまなシナリオで表示される可能性があります。

1つの理由を定義しました:

私の場合、私が定義した問題は

ダブル(17,17)

...つまり、17桁と17桁を意味するので、整数で0になります!!!!!!と

double(24; 12)

すべてがOKです

0