2013-02-27 18 views
7

Tôi chỉ phát hiện ra cái gì đó như you can writeMySQL "không rõ"

SELECT NULL IS UNKNOWN 

nào trả 1.

Có địa điểm nào khác mà bạn có thể sử dụng UNKNOWN không? Nó có vẻ không phải là một từ khóa (không thể làm SELECT UNKNOWN). NULL IS NULL cũng đúng, vì vậy mục đích UNKNOWN có mục đích gì?

Trả lời

9

UNKNOWN chỉ là một bí danh cho BOOLEANNULL ... cùng một cách mà TRUE chỉ là một bí danh cho 1FALSE chỉ là một bí danh cho 0, vì in MySql BOOLEAN itself is just an alias for TINYINT(1)

Tại sao nó có ở đó không? Bởi vì nó là một phần của tiêu chuẩn SQL-92:

<truth value> ::= 
       TRUE 
       | FALSE 
       | UNKNOWN 

Tại sao bạn SELECT NULL, SELECT TRUE, SELECT FALSE, nhưng không SELECT UNKNOWN? Có lẽ chỉ là một lỗi, since UNKNOWN itself wasn't supported until newer versions of MySql.

+3

+1 với một thông báo nhỏ: xem xét 'TRUE' như một bí danh cho' 1' là một chút gây hiểu nhầm vì '2 TRUE' (và bất kỳ số nguyên khác không), nhưng bạn thực sự không thể thực hiện' SELECT 2 IS 1' – Mchl

1

Chỉ sử dụng để mô tả giá trị boolean không có giá trị đã biết. Cũng giống như ví dụ đầu tiên nói, nó tương đương boolean NULL.

+0

Tại sao chỉ là boolean? 'SELECT 'asdf' IS UNKNOWN' hoạt động. –

+0

Bởi vì trong MySQL 'NULL IS UNKNOWN' và tất nhiên bạn có thể' SELECT 'asdf' IS NULL'. – Mchl

2

Dường như với tôi, trong MySQL, UNKNOWN là bí danh cho NULL, được sử dụng theo nghĩa Boolean.

tôi có thể tìm thông tin này:

Trong SQL, tất cả các toán tử logic đánh giá là TRUE, FALSE, hoặc NULL (UNKNOWN).

MySQL docs - 12.3.3. Logical Operators

Một số thêm thông tin về chung NULL SQL và UNKNOWN:

Khi bị hạn chế bởi một hạn chế NOT NULL, SQL BOOLEAN hoạt động như kiểu Boolean từ các ngôn ngữ khác. Tuy nhiên, không hạn chế, kiểu dữ liệu BOOLEAN BOOLEAN, mặc dù tên của nó, có thể chứa giá trị chân lý TRUE, FALSE và UNKNOWN, tất cả được định nghĩa là boolean literals theo tiêu chuẩn. Tiêu chuẩn này cũng khẳng định rằng NULL và UNKNOWN "có thể được sử dụng thay thế cho nhau để có nghĩa là chính xác cùng một điều".

NULL on Wikipedia

+0

Nó không phải là một bí danh mặc dù. Như tôi đã chỉ ra, bạn có thể thực hiện 'SELECT NULL' nhưng không thể' SELECT UNKNOWN'. Bạn có nghĩa là nó là một bí danh khi được sử dụng với toán tử 'IS'? – mpen

+0

@Mark Về cơ bản, nó dường như là giá trị Boolean thứ ba bị thiếu :). Cho đến nay dường như nó chỉ hoạt động với 'IS' và' IS NOT'. – kapa