2013-02-27 58 views
7

我剛剛發現you can writeMySQL的 「未知」

SELECT NULL IS UNKNOWN 

它返回1

有沒有其他地方可以使用UNKNOWN?它似乎不是關鍵字(不能做SELECT UNKNOWN)。 NULL IS NULL也是如此,那麼UNKNOWN有什麼用途?

回答

9

UNKNOWN僅僅是BOOLEANNULL別名...同樣的方式,TRUE只是爲1FALSE的別名只是0一個別名,因爲in MySql BOOLEAN itself is just an alias for TINYINT(1)

爲什麼它甚至在那裏?因爲它是SQL-92標準的一部分:

<truth value> ::= 
       TRUE 
       | FALSE 
       | UNKNOWN 

爲什麼你可以SELECT NULLSELECT TRUESELECT FALSE,但不SELECT UNKNOWN?可能只是一個bug,since UNKNOWN itself wasn't supported until newer versions of MySql

+3

+1有一個小的通知:考慮到'TRUE'作爲'1'的別名有點誤導,因爲'2 IS TRUE'(和其他任何非零整數),但你實際上不能做'SELECT 2 IS 1' – Mchl 2013-02-28 09:11:04

1

它只是用來描述一個沒有已知值的布爾值。就像第一個例子所說的那樣,它的布爾值等於NULL

+0

爲什麼只是布爾值? 'SELECT'asdf'IS UNKNOWN'起作用。 – 2013-02-27 23:27:36

+0

因爲在MySQL中'NULL IS UNKNOWN',當然你可以'SELECT'asdf'IS NULL'。 – Mchl 2013-02-27 23:30:42

2

在我看來,在MySQL中,UNKNOWNNULL的別名,用於布爾意義上。

我能找到這個參考:

在SQL中,所有邏輯運算符評估爲TRUE,FALSE或NULL(未知)。

MySQL docs - 12.3.3. Logical Operators

上一般SQL NULL和未知的一些詳細信息:

當一個NOT NULL約束限制,在SQL BOOLEAN就像 布爾類型從其他語言。然而,不受限制,儘管BOOLEAN數據類型的名稱是 ,但它們可以保留真值TRUE, FALSE和UNKNOWN,根據標準,所有這些都被定義爲布爾文字 。該標準還斷言NULL和「未知」可以互換使用,表示完全相同的事物。

NULL on Wikipedia

+0

儘管這不是別名。正如我指出的,你可以做'SELECT NULL',但不能'SELECT UNKNOWN'。你的意思是它本質上是與'IS'運算符一起使用的別名? – mpen 2013-02-27 23:45:34

+0

@Mark它基本上似乎是缺少的第三個布爾值:)。到目前爲止,它似乎只適用於'IS'和'IS NOT'。 – kapa 2013-02-27 23:52:18