【问题标题】:MysqlDataTruncation error on insert插入时出现MysqlDataTruncation错误
【发布时间】:2016-09-12 14:47:08
【问题描述】:

正在连接到选定的数据库...
已成功连接数据库...
正在向表中插入记录...
com.mysql.jdbc.MysqlDataTruncation:数据截断:第 1 行“st_phno”列的值超出范围再见!

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4072)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4006)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2468)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2629)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2713)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1794)
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1712)
at insert.Katal.main(Katal.java:24)

我创建了名为 Katal 的数据库和名为 Student 的数据库中的表。 我给了一列(st_phno int(10))。 当我将 st_phno 的值插入为 9876543210 时,它会引发上述异常。 帮助纠正程序

【问题讨论】:

  • 使用表元数据添加代码
  • edit您的问题包括(1)SHOW CREATE TABLE ...的结果在相关表格中,并且(2)尝试执行 INSERT 的相关 Java 代码。

标签: java mysql jdbc


【解决方案1】:

MySQL documentation 开始,整数可以取以下范围:

-2147483648 to 2147483647

当您尝试将值 9876543210 插入 st_phno 列时,MySQL 首先必须运行有效性检查,以确保您插入的整数在范围内。它未能通过此检查,因为它大于2147483647 的最大允许值。

你得到的错误有点误导,因为你的插入甚至从来没有达到varchar的情况,因为插入。该消息表明 MySQL 拒绝将一个完全有效的 10 个字符的字符串插入宽度为 10 的列中。这不是错误消息的原因,您可以通过插入例如十位数字来自己验证这一点号码2000000000

解决方法:

由于您的st_phon 列是varchar,因此您可以在整数内使用INSERT 字符串。所以我希望以下查询能够成功而不会出错:

INSERT INTO Student (`st_phon`) VALUES ('9876543210');

这应该可行,因为将不再检查输入是否为整数。唯一的检查是确保 varchar 的宽度为 10 或更小,确实如此。

【讨论】:

  • 如果回答了您的问题,请标记为正确,谢谢。
猜你喜欢
  • 2015-10-09
  • 1970-01-01
  • 1970-01-01
  • 2014-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多