У меня база данных работает уже более двух лет. Недавно я решил, что было бы неплохо изменить сопоставление всей схемы и всех таблиц на одну, отличную от 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
, независимо от того, какие значения вы передаете ей. У кого-нибудь есть идеи почему?