插入时出现MysqlDataTruncation错误

时间:2016-09-12 14:47:08

标签: java mysql jdbc

连接到选定的数据库...
成功连接数据库...
将记录插入表格中...
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时,它会抛出异常。 帮助纠正程序

1 个答案:

答案 0 :(得分:0)

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

-2147483648 to 2147483647

当您尝试将值9876543210插入st_phno列时,MySQL first 必须运行有效性检查,表明您插入的整数在范围内。它未通过此检查,因为它更大而不是2147483647的最大允许值。

你得到的错误有点误导,因为插入永远不会像varchar那样插入2000000000。该消息使得MySQL拒绝将完全有效的10个字符串插入宽度为10的列中。这不是错误消息的原因,您可以通过插入例如十位数来自行验证号码st_phon

解决方法:

由于您的varchar列为INSERT,因此您可以INSERT INTO Student (`st_phon`) VALUES ('9876543210'); 整数内的字符串。所以我希望以下查询成功而不会出错:

varchar

这应该有效,因为不再检查输入为整数。唯一的检查是确保{{1}}的宽度宽度为10或更小,这样做。