Kiedy uruchomić kwerendy w MS Access mogę szczęśliwie użyć kwerendy tak:Dlaczego MS ma wartość boolean true -1 zamiast 1 lub true?
SELECT clients.* FROM clients WHERE active=True;
lub
SELECT clients.* FROM clients WHERE active=-1;
ale nie
SELECT clients.* FROM clients WHERE active=1;
Ponadto, mówią, że chcą zapytanie do bazy danych za pomocą PDO Mogę użyć przygotowanej instrukcji:
$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
Tak więc pomimo, że działa podczas wysyłania zwykłego zapytania do programu Access, jeśli tylko wiązanie będzie miało wartość -1
lub 0
, będzie działać dla wartości boolowskiej.
Dlaczego to jest i dlaczego jest -1
przedstawiciel true
gdy 1
oznacza zwykle true
w innych językach/baz danych?
To wydaje się bardzo logiczne. Oczywiście Access może poradzić sobie z podawaniem "true" w normalnym komunikacie, ale wiążące zapytania nie mogą tak stworzyć problemu, chyba że podasz mu odpowiednią wartość. '<> 0' wydaje się dobrym obejściem dla' true' jako @ChristianSpecht mentioned – harryg
Tak, Christian ma rację. Po prostu pomyślałem, że odpowiem na drugą część twojego pytania. – jonhopkins
+1 Innym sposobem patrzenia na to jest to, że liczba całkowita (która jest tylko jedna bitowa) może być tylko jedną z dwóch wartości: 0 lub -1. –