我正在使用java和MySQL。我试图在表中插入一个值。
当我插入时,我得到了这个例外:
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of
range value for column 'idPxxx' at row 1
只有5%的插入会产生此异常,其他插件则有效。错误意味着什么,我该如何预防?
答案 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)
<强>解决方案强>
答案 2 :(得分:0)
对我来说,问题是无符号数据类型,删除标志已修复我的问题。
答案 3 :(得分:0)
这种错误消息可以针对不同的情况显示。
我已经定义了一个原因:
就我而言,我定义的问题
双(17,17)
...这意味着17位数字和17个十进制数,因此对于整数来说,它为0!
double(24; 12)
一切都很好