我有一个运行了两年以上的数据库。最近,我认为将整个架构和所有表的排序规则更改为utf8_general_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
,无论您传递给它什么值。有谁知道为什么吗?