JavaとMySQLを使用しています。テーブルに値を挿入しようとしています。
挿入すると、次の例外が発生します。
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of
range value for column 'idPxxx' at row 1
挿入の5%だけがこの例外を生成し、他は機能します。エラーの意味とその回避方法を教えてください。
これは、idPxxx
に格納しているデータが適合しないことを意味します。たとえば、文字列が長すぎるか、数値が大きすぎる可能性があります。
idPxxx
のデータ型は何ですか?そして、あなたはそれに何を保存しようとしていますか?
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つの理由を定義しました:
私の場合、私が定義した問題は
ダブル(17,17)
...つまり、17桁と17桁を意味するので、整数で0になります!!!!!!と
double(24; 12)
すべてがOKです