title: Why is MS access boolean true -1 rather than 1 or true?
body: <p>When I run a query in MS Access I can happily use a query like this:</p>
  
  <pre><code>SELECT clients.* FROM clients WHERE active=True;
  </code></pre>
  
  <p>or</p>
  
  <pre><code>SELECT clients.* FROM clients WHERE active=-1;
  </code></pre>
  
  <p>but not</p>
  
  <pre><code>SELECT clients.* FROM clients WHERE active=1;
  </code></pre>
  
  <p>In addition, say I want to query the database using PDO I might use a prepared statement:</p>
  
  <pre><code>$db-&gt;prepare('SELECT clients.* FROM clients WHERE active=:isactive;');
  $db-&gt;bindValue(':isactive', True); //Does not work
  $db-&gt;bindValue(':isactive', 1); //Does not work
  $db-&gt;bindValue(':isactive', -1); //Does work
  </code></pre>
  
  <p>So even though <code>true</code> works when sending a plain query to Access, if binding only <code>-1</code> or <code>0</code> will work for boolean.</p>
  
  <p>Why is this and why is <code>-1</code> representative of <code>true</code> when <code>1</code> usually means <code>true</code> in other languages/databases?</p>