为什么MS访问布尔值为真而不是1或真?

har*_*ryg 12 php ms-access pdo

当我在MS Access中运行查询时,我可以愉快地使用这样的查询:

SELECT clients.* FROM clients WHERE active=True;
Run Code Online (Sandbox Code Playgroud)

要么

SELECT clients.* FROM clients WHERE active=-1;
Run Code Online (Sandbox Code Playgroud)

但不是

SELECT clients.* FROM clients WHERE active=1;
Run Code Online (Sandbox Code Playgroud)

另外,假设我想使用PDO查询数据库,我可能会使用预准备语句:

$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
Run Code Online (Sandbox Code Playgroud)

因此,即使true在向Access发送普通查询时工作,如果仅绑定-10将适用于布尔值.

这是为什么,为什么-1代表true1通常意味着true在其他语言/数据库?

jon*_*ins 7

我似乎无法找到这个来自的确切来源,但我记得刚才读到这个我认为MSDN.这个答案有一个技术描述Visual Basic的布尔值true,它也适用于Access.

如果我没记错的话,那是因为-1用二进制表示,每个位设置为1(1111 1111),而+1只有最低有效位设置为1,其余全部为0(0000 0001).由于false被表示为0( 0000 0000),它很容易之间切换true,并false使用按位NOT,但如果true是别的,按位非会导致一些不false.此外,使用按位AND来检查任何真值上的真值都可行,而如果是真的则0000 0001不会.