2010-07-03 100 views
4
  1. 是否布爾值false == 0和真正的== 1
  2. 是否在VARCHAR,INT,日期字段== 0值?
  3. 默認情況下在mysql中的值是== 0還是NULL或者是空字符串?

回答

4

問題:是否布爾值false == 0和真正的== 1

是 - 你可以測試使用:

SELECT IF(0, 'true', 'false') 

...它會返回「假「,意思是零表示錯誤,一個表示正確。這個例子取自MySQL documentation page

問題:在varchar,int,日期字段== 0中的空值嗎?

不,NULL表示缺少任何值的
如果要比較值爲NULL,則需要使用特殊的運算符。

問題:默認情況下,mysql的值== 0或NULL或空字符串?

沒有默認約束,如果沒有提供任何值,允許NULL的列將包含NULL - 無論數據類型(DATETIME,數字,文本等)如何。不允許NULL的列將返回錯誤,直到提供與該列的數據類型相匹配的值。默認約束允許您指定默認值,如果有人試圖向列中插入NULL值,或者該列已從INSERT語句中省略。

+0

任何非零值都被認爲是真實的,而不僅僅是1。 – 2010-07-04 00:26:13

7

MySQL內部沒有bool值。顯示返回布爾值表達式實際上返回一個整數0或1:

SELECT (3 < 5) 
1 

SELECT (3 > 5) 
0 

SELECT (3 < 4) + (4 < 5) 
2 

SELECT TRUE 
1 

TRUE和FALSE是1只是別名和0

NULL不等於任何值,即使不是另一個NULL。

SELECT NULL = '' 
NULL 
SELECT NULL = NULL 
NULL 

如果你想與NULL比較使用IS NULL


更新:對MySQL是否支持布爾值有一些困惑。該實施例表明,即使在一個列中的BOOL類型仍然只是一個整數:

 
CREATE TABLE table1 (id INT, x BOOL); 
INSERT INTO table1 VALUES 
(1, TRUE), 
(2, FALSE), 
(3, 3); -- Can you insert 3 into a BOOL type? Yep! 
SELECT * FROM TABLE1; 

結果:

id x 
1 1 
2 0 
3 3 
+0

-1:實際上,MySQL中有bool/boolean(雖然它們都是TINYINT的同義詞):http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview。 html – 2010-07-04 00:02:18

+1

@OMG Ponies:在您發佈的頁面上:「但是,值TRUE和FALSE分別僅爲1和0的別名。」 – 2010-07-04 00:19:57

1

在SQL NULL代表不存在的值。在MySQL中,明確的NULL也可以表示僞序列的下一個值,而隱式NULL可以表示由MySQL確定的隱式默認值(零或空字符串)。