Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么MySQL 8 IF和IFNULL在测试值为NULL的变量时返回BLOB结果?_Mysql_Variables_Null_Coalesce_Ifnull - Fatal编程技术网

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

为什么MySQL 8 IF和IFNULL在测试值为NULL的变量时返回BLOB结果?,mysql,variables,null,coalesce,ifnull,Mysql,Variables,Null,Coalesce,Ifnull,注:我已经将这个问题的本质转移到了解一些正在发生的事情,但仍然想理解。(本质上,当变量未定义或在定义之前已设置为NULL时,ISNULL和COALESCE的行为异常。) 我肯定错过了一些非常简单的问题,但我看不到任何类似的答案,前面的问题。如果没有设置变量,但看不到如何设置,我想使用默认值 SET @x = NULL; SELECT IFNULL(NULL, 5), IFNULL(@x,5), IF(@x IS NULL, 5, @x); -- gives 5, BLOB, BLOB 我读到C

注:我已经将这个问题的本质转移到了解一些正在发生的事情,但仍然想理解。(本质上,当变量未定义或在定义之前已设置为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或5吗?

MySQL 5.1给出了5,5,5。你的调查毫无意义。服务器使用的数据类型可以存储任何(最初不可预测的)输出值,并避免任何理论上可能的数据截断。如果您需要某些明确的数据类型,请使用explicit CAST()。@Akina不理解您的评论。OP在问,如果
@x
为空,如果
IFNULL(NULL,5)
给出5,为什么
IFNULL(@x,5)
也给出5?@WillisBlackburn为什么IFNULL(@x,5)也给出5?????OP根本不看结果!!!他查看由某个(未指定)客户端显示的结果数据类型。。。看一看,确保:有趣。当我在SQLFIDLE中尝试它时,最后两列显示“NQ==”,它是用base64编码的“5”。看起来在所有情况下,使用
@x
的两个表达式的结果都是一个blob,不同的客户端只是对其进行不同的解码。但问题是,为什么
IFNULL(NULL,5)
给出5(作为一个整数),而
IFNULL(@x,NULL)
给出5作为一个blob?我猜这与以下事实有关:
IFNULL(NULL,5)
只包含常量,因此MySQL在解析查询时可以知道它将仅为5。