注意:我已经把这个问题的本质移到here了了解了一些正在发生的事情,但仍想了解。 (本质上,当变量未定义或在定义前已设置为 NULL 时,ISNULL 和 COALESCE 表现异常。)
我一定是遗漏了一些非常简单的东西,但我没有看到类似的上一个问题的任何答案。如果未设置变量,我想使用默认值,但不知道该怎么做。
SET @x = NULL;
SELECT IFNULL(NULL, 5), IFNULL(@x,5), IF(@x IS NULL, 5, @x); -- gives 5, BLOB, BLOB
我读到 COALESCE 是在这里使用的正确函数,但 COALESCE(@x,5) 也给出 BLOB。
我错过了什么?实际上不可能说 x = x OR 5 吗?
最佳答案
这很奇怪。使用 MySQL Workbench,如果您运行所有 3 个 block ,它将开始工作:
SET @x = NULL;
SELECT IFNULL(NULL, 5), IFNULL(@x,5), IF(@x IS NULL, 5, @x); -- 5, blob, blob
SET @x = 'TEST';
SELECT IFNULL(NULL, 5), IFNULL(@x,5), IF(@x IS NULL, 5, @x); -- 5, TEST, TEST
SET @x = NULL;
SELECT IFNULL(NULL, 5), IFNULL(@x,5), IF(@x IS NULL, 5, @x); -- 5, 5, 5
据我所知,您无法为用户定义的变量定义类型,但 MySQL 似乎不知道如何处理此变量,直到您首先将其设置为非空值。如果我在 sqlDeveloper 中运行您的语句,它将输出 77686174 而不是“BLOB”。
关于mysql - 为什么 MySQL 8 IF 和 IFNULL 在测试值为 NULL 的变量时返回 BLOB 结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62400234/