MySQL:当某些东西与NULL相等时会发生什么?

sta*_*ack 2 php mysql sql null

CASE WHEN我的查询中有一个函数.像这样的东西:

CASE WHEN h.user_id = :user_id THEN '1' 
     ELSE '0'
END paid
Run Code Online (Sandbox Code Playgroud)

我这样经过:user_id:

$sth->bindValue(":user_id", $user_id, PDO::PARAM_INT);
Run Code Online (Sandbox Code Playgroud)

好吧,有时候$user_idNULL.我已经听说NULL在查询中某些内容相同时会发生一些不好的事情.现在,我想知道,会发生什么情况$user_idNULL

我测试了它,但一切都很好,我没有看到任何问题.如果$user_idNULL,$result['paid']1CASE..WHEN断裂?


编辑:

我想做的就是h.user_id = :user_id那时候paid = 1.但有时候:user_idnull.我该怎么逃避null

Dar*_*rax 6

你遇到的问题是因为,根据标准,比较任何东西null给出的结果null,最终被强迫false.因此,你的表情,就写,总是返回0时,无论是:user_idh.user_idnull.

幸运的是,这种情况经常出现,MySQL提供了一些语法糖,称为"太空飞船"或" NULL-safe equal"运算符,看起来像<=>.它的使用方式与普通=算子完全相同,只是在比较a 和非n时,以及在比较两者时返回false(不null).nullnulltruenull

然后表达成为

CASE WHEN h.user_id <=> :user_id THEN '1' 
     ELSE '0'
END paid
Run Code Online (Sandbox Code Playgroud)