MySQL中的这个操作符是什么?
我正在编写由以前的开发人员编写的代码,并在查询中说,
WHERE p.name <=> NULL  这个查询中<=>是什么意思? 这是否等于= ? 或者是一个语法错误? 
 但没有显示任何错误或例外。 我已经知道在MySQL中<> = != 
 与=运算符相似 
 像常规=运算符一样,比较两个值,结果为0 (不等于)或1 (等于); 换句话说: 'a' <=> 'b'产生0 , 'a' <=> 'a'产生1 。 
 与=运算符的区别 
 与regular =运算符不同, NULL值没有特殊含义,因此它不会产生NULL作为可能的结果; 所以: 'a' <=> NULL产生0和NULL <=> NULL产生1 。 
 与=相反, 'a' = NULL产生NULL ,甚至NULL = NULL产生NULL ; 顺便说一句,MySQL中几乎所有的操作符和函数都以这种方式工作,因为与NULL比较基本上是不确定的。 
用处
 这对于两个操作数都可以包含NULL并且两个列之间需要一致的比较结果非常有用。 
另一个用例是用准备好的语句,例如:
 ... WHERE col_a <=> ? ... 
 在这里,占位符可以是标量值或NULL而不必改变查询的任何内容。 
相关操作员
 除了<=> ,还有两个可以用来比较NULL运算符,即IS NULL和IS NOT NULL ; 他们是ANSI标准的一部分,因此支持其他数据库,不像<=> ,这是特定于MySQL的。 
 你可以把它们看作MySQL的<=> : 
 'a' IS NULL ==> 'a' <=> NULL 'a' IS NOT NULL ==> NOT('a' <=> NULL) 
基于此,您的特定查询(片段)可以转换为更便携:
 WHERE p.name IS NULL 
 是<=> NULL-safe equal to operator 
该运算符与=运算符执行相等比较,但如果两个操作数都为NULL,则返回1而不是NULL;如果一个操作数为NULL,则返回0而不是NULL。
在这里看到的文件
示例:
你应该使用IS NOT NULL。 (比较运算符=和<>都在expression式的任一侧给出了UNKNOWN NULL)。
 SELECT * FROM table WHERE YourColumn IS NOT NULL; 
也可以否定null安全等号运算符,但这不是标准的SQL。
 SELECT * FROM table WHERE NOT (YourColumn <=> NULL); 
它是NULL等于运算符的
<=>运算符用于比较NULL值与字段。 如果normal =(equals)如果其中一个比较值为NULL,则运算符返回NULL。 用<=>运算符返回true或false。 <=>运算符与IS NULL相同。
从手册: –
<=>与=运算符执行相等比较,但是如果两个操作数都为NULL,则返回1而不是NULL;如果一个操作数为NULL,则返回0而不是NULL。
 mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL; -> 1, 1, 0 mysql> SELECT 1 = 1, NULL = NULL, 1 = NULL; -> 1, NULL, NULL 
编辑:( 虽然很迟才添加一个重要的旁注,提到NOT <=> )
在旁注: –
不是<=>
还有一点NOT <=>用于比较NULL值和字段。 如果正常!=或<>(不等于)如果其中一个比较值为NULL,则运算符返回NULL。 不适用于<=>运算符返回true或false。 不适用于<=>运算符与IS NOT NULL相同。
例:-
 SELECT NULL != NULL, //--Result is NULL NOT NULL <=> NULL, //--Result is 0 NULL IS NOT NULL; //--Result is 0 
  <=>是MySQL的无效“等于”运算符。  从手册 : 
NULL安全相等。 该运算符与=运算符执行相等比较,但如果两个操作数都为NULL,则返回1而不是NULL;如果一个操作数为NULL,则返回0而不是NULL。
 mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL; -> 1, 1, 0 mysql> SELECT 1 = 1, NULL = NULL, 1 = NULL; -> 1, NULL, NULL 
NULL安全相等。 该运算符与=运算符执行相等比较,但如果两个操作数都为NULL,则返回1而不是NULL;如果一个操作数为NULL,则返回0而不是NULL。
 mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL; -> 1, 1, 0 mysql> SELECT 1 = 1, NULL = NULL, 1 = NULL; -> 1, NULL, NULL 
意义在于:
当您将NULL值与非NULL值进行比较时,您将获得NULL。 如果你想检查一个值是否为空。
Equality操作符(<=>)将NULL视为正常值,所以如果两个值均为NULL,则返回1(而不是NULL),如果其中一个值为NULL,则返回0(不为NULL):
例如
  SELECT NULL <=> NULL -- 1 SELECT TRUE <=> TRUE -- 1 SELECT col1 <=> col2 FROM myTable 
  <=>是NULL安全的相等运算符 。  a <=> b与写作相同: 
 CASE WHEN a IS NULL AND b IS NULL THEN 1 -- both operands null then 1 WHEN a IS NULL OR b IS NULL THEN 0 -- one operand is null then 0 ELSE a = b -- else behave like normal = operator END 
 对不起,我找不到一个很好的理由来使用这个运算符,而不是AND/OR IS (NOT) NULL 。 你的例子,例如, WHERE p.name <=> NULL与WHERE p.name IS NULL相同。 
从MySQL文档 :
NULL安全相等。 该运算符与=运算符执行相等比较,但如果两个操作数都为NULL,则返回1而不是NULL;如果一个操作数为NULL,则返回0而不是NULL。
 使用<=>运算符的例子是: 
 SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL; 
哪个会返回:
 1, 1, 0 
  regular =运算符的一个例子是: 
 SELECT 1 = 1, NULL = NULL, 1 = NULL; 
哪个会返回:
 1, NULL, NULL 
  <=>运算符与=运算符非常相似,只是<=>不会返回NULL 
它是NULL – 安全等于操作符。 检查描述 。
 mysql> SELECT * FROM t JOIN t2 WHERE t2.ids = t.ids; +----+------+----+------+ | id | ids | id | ids | +----+------+----+------+ | 1 | 1 | 1 | 1 | | 2 | 2 | 2 | 2 | | 5 | 6 | 5 | 6 | | 6 | 7 | 6 | 7 | +----+------+----+------+ 4 rows in set (0.00 sec) mysql> SELECT * FROM t JOIN t2 WHERE t2.ids <=> t.ids; +----+------+----+------+ | id | ids | id | ids | +----+------+----+------+ | 1 | 1 | 1 | 1 | | 2 | 2 | 2 | 2 | | 3 | NULL | 3 | NULL | | 4 | NULL | 3 | NULL | | 3 | NULL | 4 | NULL | | 4 | NULL | 4 | NULL | | 5 | 6 | 5 | 6 | | 6 | 7 | 6 | 7 |