MySQL提供了一个很好的运算符<=>
,它可以处理包含空值的比较,例如null <=> null
或null <=> 5
等,可以像许多编程语言一样提供直观的结果。正常的equals运算符总是只返回null,这会吸引许多新的MySQL用户,比如我自己的错误。
MySQL是否同时具有<=>
中的功能?谁真的需要一个内置语言类型有效未定义的运算符?
答案 0 :(得分:10)
谁真的需要一个内置语言类型有效未定义的运算符?
你问了一些现实世界的例子。这是一个虚假的。 假设你有一个住宿青年计划或类似的,其中一个要求是孩子们只与同性别的人共用一个房间。您的数据库中有一个可以为空的M / F字段 - 可以为空,因为您的数据提要不完整(您仍在追逐某些数据)。 您的房间匹配代码绝对不能与t1.Gender&lt; =&gt; t2.Gender的学生匹配,因为它最终可能会匹配两个性别不明的孩子,他们可能是性别相反的。相反,你匹配它们相等的位置,而不是都是空的。
这只是一个例子。我承认NULL
和=
运算符的行为多年来引起了很多混乱,但最终的错误可能在于过多的在线MySQL教程没有提及{{{ 1}}与运算符交互,也不存在NULL
运算符。
答案 1 :(得分:6)
mySQL和编程语言中null之间的最大区别在于,在mySQL中,null表示未知值,而在编程中则表示未定义值。
在mySQL中,null不等于null(unknown不等于unknown)。在编程语言中,null确实等于null(undefined等于undefined)。
答案 2 :(得分:4)
谁真的需要一个有效的未定义的运算符 在语言类型?
您还需要它来处理数据库中的关系。特别是如果您使用外键约束。
例如,如果您有一个任务表(在您的公司中)。然后将这些任务分配给员工。所以你有一个从你的任务表到你的员工表的关系
总会有一些未分配的任务。在这种情况下,您用于与employees表的关系的tasks-table中的字段将包含NULL
。
这将确保此任务未分配。这意味着:不可能与employees表有关系。
如果NULL = NULL
为true
,那么在我的示例中,employees表中的外键也总是NULL
。因此,任务将分配给一个或一些员工。并且你永远无法确定是否将任务分配给某个员工。
答案 3 :(得分:2)
MySql是否同时具有&lt; =&gt;中的功能? ? 运营商彼此完全不同。
<=>
执行与=
运算符类似的相等比较,但如果两个操作数均为1
,则返回NULL
而不是NULL
,0
如果一个操作数是NULL
,而不是NULL
。
谁真的需要一个有效的未定义的运算符 在语言类型?
这取决于案例,仅仅因为你没有遇到过这种情况,并不意味着没有人需要它。
答案 4 :(得分:1)