mysql int类型数值仿java溢出之后处理方式
DELIMITER //
create function overflow(i bigint)
returns int
begin
declare min_int int;
declare max_int int;
declare r int;
declare nhash bigint;
set nhash = 4294967296;
set min_int = -2147483648;
set max_int = 2147483647;
set i = i - min_int;
-- 刚好为0
if i % nhash = 0
then
return(min_int);
-- 值小于最小值,值溢出之后仍小于0, 即i距离最大值的绝对值仍大于最大值边界2147483647
elseif i % nhash < 0 && -(i % nhash) >= 2147483647
then
return(1 + (i % nhash) + 2147483647);
-- 值溢出之后大于0, 即i距离最大值的绝对值仍小于最大值边界2147483647
elseif i % nhash < 0 && -(i % nhash) < 2147483647
then
return(max_int + i % nhash + 1);
-- 值大于最小值,值溢出后小于0,即属于0 - min_int
elseif i % nhash < 2147483649
then
return(min_int + (i % nhash));
else
return((i % nhash) - 2147483648);
end if;
end
//
DELIMITER ;