Mysql数据库的Bigint字段值溢出问题

今天在处理文章去重的过程中,在把simhash计算出值放到mysql数据库的过程中发现hash字段值溢出的情况。
在java程序中我的值是BigInteger类型的,数据库存放的字段也是bigint类型,这个按道理是可以存放的,百思不得其解,一直在原因。后面发现是数据库字段设置问题,即字段的有无符号问题。

unsigned 既为非负数,用此类型可以增加数据长度!
例如如果
tinyint最大是127,那 tinyint unsigned 最大 就可以到 127 * 2

unsigned 属性只针对整型,而binary属性只用于char 和varchar。
Mysql数据库的Bigint字段值溢出问题_第1张图片
每种数值类型的名称和取值范围如下图所示。
Mysql数据库的Bigint字段值溢出问题_第2张图片

所以真相大白,导致我的bigint字段溢出的原因就是我的bigint字段设置的是有符号的,所以我们把他设置成无符号的就可以了。如下:

set sql_mode = 'NO_UNSIGNED_SUBTRACTION';

你可能感兴趣的:(数据库)