2013-02-27 23 views
7

Ho appena scoperto you can write qualcosa comeMySQL "sconosciuto"

SELECT NULL IS UNKNOWN 

che restituisce 1.

Ci sono altri posti che è possibile utilizzare UNKNOWN? Non sembra essere una parola chiave (non può fare SELECT UNKNOWN). NULL IS NULL è anche vero, quindi quale scopo ha UNKNOWN?

risposta

9

UNKNOWN è solo un alias per BOOLEANNULL ... allo stesso modo che TRUE è solo un alias per 1 e FALSE è solo un alias per 0, dal momento che in MySql BOOLEAN itself is just an alias for TINYINT(1)

Perché è anche lì? Perché è parte dello standard SQL-92:

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

Perché può voi SELECT NULL, SELECT TRUE, SELECT FALSE, ma non SELECT UNKNOWN? Probabilmente solo un bug, since UNKNOWN itself wasn't supported until newer versions of MySql.

+3

+1 con un avviso minore: considerare 'TRUE' come un alias per' 1' è un po 'fuorviante dal momento che '2 È VERO' (e qualsiasi altro intero diverso da zero), ma non si può effettivamente fare' SELECT 2 IS 1' – Mchl

1

L'unico scopo è descrivere un valore booleano che non ha alcun valore noto. Proprio come il primo esempio dice, è l'equivalente booleano di NULL.

+0

Perché solo booleano? 'SELECT 'asdf' IS UNKNOWN' funziona. –

+0

Perché in MySQL 'NULL IS UNKNOWN 'e ovviamente puoi' SELECT' asdf 'IS NULL'. – Mchl

2

Mi sembra, in MySQL, UNKNOWN è un alias per NULL, utilizzato in senso booleano.

sono riuscito a trovare questo riferimento:

In SQL, tutti gli operatori logici restituiscono TRUE, FALSE o NULL (sconosciuto).

MySQL docs - 12.3.3. Logical Operators

Qualche informazione in più su NULL SQL generale e sconosciuto:

Quando limitato da un vincolo NOT NULL, il BOOLEANO SQL funziona come il tipo booleano da altre lingue. Tuttavia, il tipo di dati BOOLEAN , nonostante il suo nome, può contenere i valori di verità TRUE, FALSE e SCONOSCIUTO, tutti definiti come valori letterali booleani in base allo standard. Lo standard asserisce anche che NULL e UNKNOWN "possono essere usati in modo intercambiabile per significare esattamente la stessa cosa".

NULL on Wikipedia

+0

Tuttavia non è un alias. Come ho sottolineato, puoi fare "SELECT NULL" ma non "SELECT UNKNOWN". Vuoi dire che è essenzialmente un alias quando usato con l'operatore 'IS'? – mpen

+0

@Mark In pratica sembra essere il terzo valore booleano mancante :). Finora sembra funzionare solo con 'IS' e' IS NOT'. – kapa