Khi tôi chạy một truy vấn trong MS Access Tôi hạnh phúc có thể sử dụng một truy vấn như thế này:Tại sao truy cập MS boolean đúng -1 chứ không phải 1 hoặc đúng?
SELECT clients.* FROM clients WHERE active=True;
hoặc
SELECT clients.* FROM clients WHERE active=-1;
nhưng không
SELECT clients.* FROM clients WHERE active=1;
Bên cạnh đó, nói rằng tôi muốn truy vấn cơ sở dữ liệu bằng PDO Tôi có thể sử dụng câu lệnh đã chuẩn bị:
$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
Vì vậy, mặc dù true
hoạt động khi gửi truy vấn đơn giản tới Access, nếu chỉ ràng buộc -1
hoặc 0
sẽ hoạt động cho boolean.
Tại sao điều này và tại sao là -1
đại diện của true
khi 1
thường có nghĩa là true
bằng ngôn ngữ/cơ sở dữ liệu khác?
Điều đó có vẻ rất hợp lý. Rõ ràng Access có thể đối phó với việc được cung cấp một 'true' trong một câu lệnh bình thường nhưng các truy vấn ràng buộc không thể tạo ra một vấn đề trừ khi bạn cho nó giá trị thích hợp. '<> 0' có vẻ giống như một cách giải quyết tốt cho' true' như @ChristianSpecht được đề cập – harryg
Yea, Christian là chính xác về điều đó. Tôi chỉ nghĩ rằng tôi sẽ trả lời phần thứ hai của câu hỏi của bạn. – jonhopkins
+1 Một cách khác để xem xét nó là một [hai bổ sung] (http://en.wikipedia.org/wiki/Two%27s_complement) số nguyên đã ký chỉ dài một bit chỉ có thể là một trong hai giá trị: 0 hoặc -1. –