首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:当某事等于NULL时会发生什么?

问MySQL:当某事等于NULL时会发生什么?
EN

Stack Overflow用户
提问于 2016-04-18 23:37:34
回答 2查看 91关注 0票数 2

我的查询中有一个CASE WHEN函数。就像这样:

代码语言:javascript
复制
CASE WHEN h.user_id = :user_id THEN '1' 
     ELSE '0'
END paid

我像这样通过了:user_id:

代码语言:javascript
复制
$sth->bindValue(":user_id", $user_id, PDO::PARAM_INT);

嗯,有时候$user_id是NULL。我已经听说,当查询中的某些内容与NULL相等时,会发生一些不好的事情。现在我想知道,当$user_id是NULL时会发生什么

我测试过了,但一切都很好,我没有发现任何问题。当$user_id是NULL时,$result['paid']是1还是CASE..WHEN中断?

编辑:

所有我想做的,当h.user_id = :user_id,然后paid = 1。但有时:user_id是null。我怎样才能逃脱null呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-19 00:03:39

您遇到的问题是,根据标准,将任何东西与null进行比较都会得到null,的结果,最终会被胁迫到false.因此,当null.或h.user_id为:user_id时,您的表达式将始终返回:user_id或h.user_id。

幸运的是,这种情况经常出现,以至于MySQL提供了一些名为-safe equal" operator的语法糖,类似于<=>。它的用法与普通的=运算符完全一样,只是它返回false (当比较null与non-null,时不返回true,在比较两个null.时返回true)。

然后这个表达式变成

代码语言:javascript
复制
CASE WHEN h.user_id <=> :user_id THEN '1' 
     ELSE '0'
END paid
票数 6
EN

Stack Overflow用户

发布于 2016-04-19 00:04:06

如果传递的参数确实是null值,那么case表达式的结果应该是0,因为null与任何字段值都不相等,所以else分支必须启动。没有必要转义空值。

为了使用PDO将null值从php适当地传递给mysql,请参阅this SO topic

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36706075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档