MySQL IF()函数不再工作

MySQL IF()函数不再工作,mysql,if-statement,stored-procedures,collation,Mysql,If Statement,Stored Procedures,Collation,我有一个数据库已经运行了两年多了。最近,我决定将整个模式和所有表的排序规则更改为utf8\u general\u ci之外的一个,这将是一个好主意。不久之后,我收到了用户的投诉,根据投诉,我恢复了对模式所做的所有更改,我认为我可以轻松入睡。但过了一段时间,我又收到了其他投诉,并着手查明问题所在,我也是如此 事实证明,其中一个存储过程中的一条语句没有返回所需的结果。是这样的: SELECT A, -- BIGINT(24) B, -- BIGINT(24)

我有一个数据库已经运行了两年多了。最近,我决定将整个模式和所有表的排序规则更改为utf8\u general\u ci之外的一个,这将是一个好主意。不久之后,我收到了用户的投诉,根据投诉,我恢复了对模式所做的所有更改,我认为我可以轻松入睡。但过了一段时间,我又收到了其他投诉,并着手查明问题所在,我也是如此

事实证明,其中一个存储过程中的一条语句没有返回所需的结果。是这样的:

    SELECT
        A, -- BIGINT(24)
        B, -- BIGINT(24)
        C, -- BIGINT(24)
        D, -- ENUM('VALUE_A', 'VALUE_B', 'VALUE_C')
    INTO
        @W, @X, @Y, @Z
    FROM
        `my_table`
    WHERE
        some_field = in_sproc_param; -- in_sproc_param (IN VARCHAR(64)) -> parameter to the stored procedure

    SET @T = @W + @X;

    SET @Q = IF(@Z <> 'VALUE_C' AND @T >= @Y, 'TRUE', 'FALSE');
    -- '


IF函数总是返回FALSE,不管传递给它的值是什么。有人知道为什么吗?

我无法重现此问题,请参见。您可能需要强制/强制转换字符串排序规则。的文档可能会有所帮助。我已经尝试过STRCMP。它就是做不到。在选择之后选择@Z、@t和@Y的值。可能是WHERE子句由于排序问题而找不到匹配项,并为变量提供空值。将空值与任何值进行比较时,结果将为false;问题可能就在那里。