mysql - 为什么 MySQL 8 IF 和 IFNULL 在测试值为 NULL 的变量时返回 BLOB 结果?

标签 mysql variables null coalesce ifnull

注意:我已经把这个问题的本质移到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/

相关文章:

mysql - 创建特定月份内的付款 list 。数据库管理系统

mysql - 帐单地址 WooCommerce 数据库表

JavaScript 私有(private)变量、函数

Java:预构建标志来检查pars而不是NULL?

mysql - 比较 NULL 和 INT

来自 2 个查找表的 Mysql 查询

c# - Entity Framework 。多个 DbContext 多个数据库。 MySQL。代码优先

c - 是否有机会在没有数组的情况下存储许多变量?

javascript - 在函数中访问 javascript 数据

java - 使用 Jackson 序列化空值