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

2022-09-02 21:14:06

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

当我插入时,我得到这个异常:

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

只有5%的刀片产生这种异常,其他刀片则起作用。该错误是什么意思,我该如何防止它?


答案 1

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

的数据类型是什么?您试图在其中存储什么?idPxxx


答案 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

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

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

解决 方案

  1. 展开列中数据类型的大小,以接受放入其中的值。
  2. 缩小您尝试塞入小型数据类型的值的大小。

推荐