小编典典

MySQL 中的这个运算符 <=> 是什么?

all

我正在编写由以前的开发人员编写的代码,并在查询中说,

WHERE p.name <=> NULL

<=>在这个查询中是什么意思?是否等于=?还是语法错误?

但它没有显示任何错误或异常。我已经知道<>=!=MySQL中。


阅读 99

收藏
2022-07-30

共1个答案

小编典典

TL;博士

这是NULL安全的相等运算符。

和正则=运算符一样,比较两个值,结果要么是0(不等于)要么是1(等于);换句话说:'a' <=> 'b'产量0'a' <=> 'a'产量1

与常规=运算符不同,值 ofNULL没有特殊含义,因此它永远不会NULL作为可能的结果产生;所以:'a' <=> NULL产量0NULL <=> NULL产量1

用处

当两个操作数都可能包含NULL并且您需要在两列之间获得一致的比较结果时,这会很有用。

另一个用例是使用准备好的语句,例如:

... WHERE col_a <=> ? ...

在这里,占位符可以是标量值,也可以是NULL无需更改查询的任何内容。

相关运算符

此外<=>,还有两个其他运算符可用于比较NULL,即IS NULLand IS NOT NULL; 它们是 ANSI
标准的一部分,因此在其他数据库上受支持,不像<=>MySQL 特定的。

您可以将它们视为 MySQL 的专业化<=>

'a' IS NULL     ==> 'a' <=> NULL
'a' IS NOT NULL ==> NOT('a' <=> NULL)

基于此,您的特定查询(片段)可以转换为更便携:

WHERE p.name IS NULL

支持

SQL:2003 标准为此引入了一个谓词,其工作方式与 MySQL 的<=>运算符完全相同,形式如下:

IS [NOT] DISTINCT FROM

以下是普遍支持的,但相对复杂:

CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 1
     ELSE 0
END = 1
2022-07-30