我已将MySQL 5.5数据库迁移到AWS Aurora,并且两个数据库都按预期工作,但有一个例外。在COALESCE
子句中使用IFNULL
和WHERE
的一组存储过程的行为与DATETIME
参数/列的预期行为无关。
MySQL 5.5和Aurora中存储过程的定义是:
CREATE DEFINER=`TesterAcct`@`%` PROCEDURE `usp_LookupTest`(
IN paramEmail VARCHAR(200),
IN paramCreateDate DATETIME
)
BEGIN
SELECT
UserID as UserID,
Email as Email,
CreateDate as CreateDate
FROM Users
WHERE
COALESCE(IFNULL(Email,''),'') = COALESCE(paramEmail,IFNULL(Email,''))
AND COALESCE(IFNULL(CreateDate,''),'') = COALESCE(paramCreateDate,IFNULL(CreateDate,''))
;
END
用于测试存储过程的调用是:
call usp_LookupTest('pcg@none.com',null)
所查询记录的列都不是NULL
,而且两个数据库实例(5.5和Aurora)都具有完全相同的数据和对象
在MySQL 5.5中,记录按预期返回,在Aurora中返回一个空数据集。我知道导致该问题的是CreateDate
子句,因为当该行被注释掉时,Aurora中的调用确实会返回记录。
我不相信这种SQL语法是非标准的,并且没有找到关于处理COALESCE
或IFNULL
的Aurora的任何文档。
我应该从哪里开始寻找下一个?