mysql截断了函数中不正确的双精度值

aemubtdh  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(550)

我搜索了一下,知道这已经被问了很多次了,但我的似乎不一样。我没有用 update 也不是 and . 由于下面的测试,我称之为“in function”,我真的很困惑。
功能:

drop function if exists `login_t`;
create function `login_t`()
returns bool
begin
    declare `pw` varchar(32);
        set `pw` = '4297f44b13955235245b2497399d7a93';
    return if(pw, pw = MD5(CONCAT('123', '123')), false);
end;
select login_t(); -- > Truncated incorrect DOUBLE value: '4297f44b13955235245b2497399d7a93'

过程中:

drop procedure if exists `login_t2`;
create procedure `login_t2`()
begin
    declare `pw` varchar(32);
        set `pw` = '4297f44b13955235245b2497399d7a93';
    select if(pw, pw = MD5(CONCAT('123', '123')), false);
end;
call login_t2(); -- 1
vuktfyat

vuktfyat1#

看起来当您从函数返回布尔值时,这些值应该是数字。mysql试图将if函数(pw)的第一个参数转换为数值,但失败了。
您可以使用代码:

create function `login_t`()
returns boolean
begin
    declare `pw` varchar(32);

    set `pw` = '4297f44b13955235245b2497399d7a93';

    if (pw = MD5(CONCAT('123', '123'))) then
      return true;
    else   
      return false;
    end if;
end;

相关问题