mysql int 类型数值仿 java 溢出之后处理方式,原生 int 类型溢出之后抛异常
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 ;
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于