根据MySQL docs, Unsinged Bigint 的最大值= 18446744073709551615
我在未加工的Bigint列中插入了值9223372036854776900(远低于最大限制)。
未显示错误。
当我尝试通过JDBC客户端以编程方式访问它时,我得到了例外:
com.mysql.jdbc.exceptions.jdbc4.MySQLDataException:'10'列中的'9223372036854776900'超出了数据类型BIGINT的有效范围。 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:422) 在com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 在com.mysql.jdbc.Util.getInstance(Util.java:386) 在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1026) 在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987) 在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982) 在com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927) at com.mysql.jdbc.ResultSetImpl.throwRangeException(ResultSetImpl.java:7964) 在com.mysql.jdbc.ResultSetImpl.parseLongAsDouble(ResultSetImpl.java:7248) 在com.mysql.jdbc.ResultSetImpl.getLong(ResultSetImpl.java:2946) 在com.mysql.jdbc.ResultSetImpl.getLong(ResultSetImpl.java:2911)
MySQL版本:5.5.41-0ubuntu0.14.04.1
答案 0 :(得分:3)
根据堆栈跟踪的建议,当我尝试使用ResultSet#getLong
Long l = rs.getLong(1);
因为存储的值9223372036854776900大于Java中的(带符号)Long
的最大值:9223372036854775807。
但是,我能够使用
成功地将值检索为BigDecimaljava.math.BigDecimal bd = rs.getBigDecimal(1);
或使用
作为BigIntegerjava.math.BigInteger bi = (java.math.BigInteger) rs.getObject(1);
答案 1 :(得分:1)
BIGINT的最大值为9223372036854775807。
来自Oracle文档(Mapping SQL and Java Types)
8.3.7 BIGINT JDBC类型BIGINT表示介于-9223372036854775808和9223372036854775807之间的64位有符号整数值。
相应的SQL类型BIGINT是SQL的非标准扩展。 实际上,SQL BIGINT类型目前尚未实现 任何主要数据库,我们建议避免使用它 在可移植的代码中。
BIGINT类型的推荐Java映射是Java long。
有一个解决方案发布到另一个可能对您有用的问题:Inserting unsigned 64-bit number into BigInt MySQL column using Java and JDBC
答案 2 :(得分:1)
您可以在下面的网站http://www.mysqlab.net/knowledge/kb/detail/topic/java/id/4929
中找到您的回复表A.2。无符号类型映射
Data TypeJava Type TINYINT UNSIGNED java.lang.Integer SMALLINT UNSIGNED java.lang.Integer MEDIUMINT UNSIGNED java.lang.Long INT UNSIGNED java.lang.Long BIGINT UNSIGNED java.math.BigInteger注意:在MySQL之前 Connector / J 3.1.3,BIGINT UNSIGNED映射到java.math.BigDecimal。