MysqlDataTruncation:数据截断:第1行的列“列”超出范围值

时间:2011-11-17 09:47:16

标签: java mysql database

我正在使用java和MySQL。我试图在表中插入一个值。

当我插入时,我得到了这个例外:

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

只有5%的插入会产生此异常,其他插件则有效。错误意味着什么,我该如何预防?

4 个答案:

答案 0 :(得分:12)

这意味着您在idPxxx中存储的数据不适合。例如,字符串可能太长,或者数字太大。

idPxxx的数据类型是什么?你想把它储存在哪里?

答案 1 :(得分:2)

如何在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)

您试图将1234塞进一个可能最多重复9.9的列中。请注意,该行仍然插入。

您可以使用严格模式来启动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

插入命令在尝试向penguin添加第二行时失败:

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

<强>解决方案

  1. 扩展列中数据类型的大小以接受放在其中的值。
  2. 缩小您尝试填充的值的大小为小数据类型。

答案 2 :(得分:0)

对我来说,问题是无符号数据类型,删除标志已修复我的问题。

答案 3 :(得分:0)

这种错误消息可以针对不同的情况显示。

我已经定义了一个原因:

就我而言,我定义的问题

  

双(17,17)

...这意味着17位数字和17个十进制数,因此对于整数来说,它为0!

  

double(24; 12)

一切都很好