Quando eseguo una query in MS Access posso tranquillamente utilizzare una query come questa:Perché l'accesso MS è booleano true -1 anziché vero o vero?
SELECT clients.* FROM clients WHERE active=True;
o
SELECT clients.* FROM clients WHERE active=-1;
ma non
SELECT clients.* FROM clients WHERE active=1;
Inoltre, dire che voglio interrogare il database usando PDO Potrei usare una dichiarazione preparata:
$db->prepare('SELECT clients.* FROM clients WHERE active=:isactive;');
$db->bindValue(':isactive', True); //Does not work
$db->bindValue(':isactive', 1); //Does not work
$db->bindValue(':isactive', -1); //Does work
Quindi, anche se true
funziona quando si invia una query semplice ad Access, se il binding solo -1
o 0
funzionerà per booleano.
Perché è questo e perché è -1
rappresentativo di true
quando 1
significa di solito true
in altre lingue/banche dati?
Sembra logico. Ovviamente Access può far fronte ad un 'true' alimentato in una normale istruzione, ma le query vincolanti non possono creare un problema a meno che non si fornisca il valore corretto. '<> 0' sembra una buona soluzione per' true' come @ChristianSpecht menzionato – harryg
Sì, Christian ha ragione a riguardo. Ho solo pensato di rispondere alla seconda parte della tua domanda. – jonhopkins
+1 Un altro modo di guardare è che un intero con [complemento a due] (http://en.wikipedia.org/wiki/Two%27s_complement) che è lungo solo un bit può essere solo uno dei due valori: 0 o -1. –