Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MysqlDataTruncation:数据截断:列';的值超出范围;列';在第一排_Java_Mysql_Database - Fatal编程技术网

Java MysqlDataTruncation:数据截断:列';的值超出范围;列';在第一排

Java MysqlDataTruncation:数据截断:列';的值超出范围;列';在第一排,java,mysql,database,Java,Mysql,Database,我正在使用java和MySQL。我试图在表中插入一个值 插入时,会出现以下异常: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column 'idPxxx' at row 1 只有5%的插入会产生此异常,其他插入会产生此异常。错误是什么意思?我如何防止它?它意味着您存储在idPxxx中的数据不适合。例如,字符串可能太长,或者数字太大 idPxxx的数据类型是什么?您试图在其中存储什么?

我正在使用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)
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
您试图将1234填充到一个最多可重复9.9次的列中。请注意,该行仍处于插入状态

您可以使用严格模式获取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)
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命令尝试向企鹅添加第二行失败:

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

  • 展开列中数据类型的大小,以接受在其中输入的值
  • 缩小要填充到小数据类型中的值的大小

  • 对我来说,问题是未签名的数据类型,删除该标志解决了我的问题

    这种类型的错误消息可以针对不同的场景显示

    我找到了一个原因:

    在我的例子中,我定义了

    双(17,17)

    。。。这意味着17位和17位小数,因此整数(!)的值为0

    双人(24,12)


    一切正常

    谢谢你,这是我的想法,但这个问题只发生在发送的数据的5%上,当我重复测试时,同样的情况也会发生。@Khaledez为什么你没有回答我在回答中提出的问题?数据类型是
    Unsigned INT(64)
    ,我正在尝试插入值
    2000
    。我再次插入到
    X
    表中,该表具有来自
    Y
    表的外键
    idPxxx
    ,并且
    idPxxx
    的值存在于
    Y
    表中。@Khaledez作为一个实验,尝试将数据类型更改为signed,然后尝试加载。也许你有负数却不知道?另一种可能是java连接器没有正确处理64位数字,因此它将它们截断为32位,这会使它们变为负数,并且由于列被列为未签名列,因此会失败。谢谢,我发现问题是由另一个问题引起的,该问题将
    idPxxx
    的值设置为-2,在我将数据类型更改为有符号后查看此问题,可能DB中有一种类型,而插入的数据是另一种类型。我也使用了无符号数据类型,并传递负值,这是由于此错误而捕获的。