2011-11-17 14 views
5

私はjavaとMySQLを使用しています。私はテーブルに値を挿入しようとしています。MysqlDataTruncation:データの切り捨て:行1の列 '列'の範囲外値

私が挿入すると、私はこの例外を取得:インサートの

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

わずか5%がこの例外を生成し、他の人が働いています。エラーは何を意味し、どうすればそれを防止できますか?

+1

http://stackoverflow.com/questions/73109/mysql-data-truncation-error –

答えて

9

これは、idPxxxに保存しているデータが収まりません。例えば、文字列が長すぎるか、大きすぎるかもしれません。

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

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

ありがとう、これは私が思ったものですが、この問題は送信されたデータの5%しか発生せず、繰り返してもテストは同じことが起こる。 – Khaledez

+0

@Khaledezどのように私は私の答えで尋ねた質問に答えなかったのですか? – Ariel

+0

データ型が 'Unsigned INT(64)'であり、値 '2000'を挿入しようとしています。 もう一度、 'Y'テーブルからの外部キー' idPxxx'を持つ 'X'テーブルに' y'テーブルに 'idPxxx'の値が挿入されています。 – Khaledez

2

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を詰め込むことを試みました。行がまだ挿入されていることに注意してください。

あなたがstrictモードを使用して、この変換を防ぐために、MySQLのコンソールを取得することができます。

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 

INSERTコマンドは、ペンギンに2つ目の行を追加しようとして失敗しました:

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

ソリューション

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

私には問題が無署名データ型で、フラグを削除すると問題が解決しました。

関連する問題