2014-07-17 3 views
21

MySQL boolean कॉलम के सत्य मूल्य की जांच करने के 2 तरीके प्रदान करता है, वे column_variable = true और column_variable is true हैं। मैंने एक टेबल बनाया, कुछ मान & डाले गए कुछ select कथनों की कोशिश की। यहाँ परिणाम हैं:MySQL: "= true" बनाम "सच है" BOOLEAN पर। यह किसका उपयोग करने के लिए सलाह दी जाती है? और कौन सा विक्रेता स्वतंत्र है?

mysql> insert into bool_test(flag) values (true),(false),(9),(null); 

mysql> select * from bool_test; 
+----+------+ 
| id | flag | 
+----+------+ 
| 1 | 1 | 
| 2 | 0 | 
| 3 | 9 | 
| 4 | NULL | 

यहाँ सब select प्रश्नों मैं इस मेज पर गोली चलाई हैं::

mysql> create table bool_test (
    -> id int unsigned not null auto_increment primary key, 
    -> flag boolean); 
Query OK, 0 rows affected (0.13 sec) 

तब मैं 4 पंक्तियों डाला:

सबसे पहले मैं इस तालिका बनाई

mysql> select * from bool_test where flag; 
+----+------+ 
| id | flag | 
+----+------+ 
| 1 | 1 | 
| 3 | 9 | 
+----+------+ 
2 rows in set (0.49 sec) 

mysql> select * from bool_test where flag = true; 
+----+------+ 
| id | flag | 
+----+------+ 
| 1 | 1 | 
+----+------+ 
1 row in set (0.02 sec) 

mysql> select * from bool_test where flag is true; 
+----+------+ 
| id | flag | 
+----+------+ 
| 1 | 1 | 
| 3 | 9 | 
+----+------+ 
2 rows in set (0.04 sec) 

mysql> select * from bool_test where flag = false; 
+----+------+ 
| id | flag | 
+----+------+ 
| 2 | 0 | 
+----+------+ 
1 row in set (0.01 sec) 

mysql> select * from bool_test where flag is false; 
+----+------+ 
| id | flag | 
+----+------+ 
| 2 | 0 | 
+----+------+ 
1 row in set (0.00 sec) 

mysql> select * from bool_test where !flag; 
+----+------+ 
| id | flag | 
+----+------+ 
| 2 | 0 | 
+----+------+ 
1 row in set (0.00 sec) 

mysql> select * from bool_test where not flag; 
+----+------+ 
| id | flag | 
+----+------+ 
| 2 | 0 | 
+----+------+ 
1 row in set (0.00 sec) 

mysql> select * from bool_test where flag != true; 
+----+------+ 
| id | flag | 
+----+------+ 
| 2 | 0 | 
| 3 | 9 | 
+----+------+ 
2 rows in set (0.00 sec) 

mysql> select * from bool_test where flag is not true; 
+----+------+ 
| id | flag | 
+----+------+ 
| 2 | 0 | 
| 4 | NULL | 
+----+------+ 
2 rows in set (0.00 sec) 

mysql> select * from bool_test where flag != false; 
+----+------+ 
| id | flag | 
+----+------+ 
| 1 | 1 | 
| 3 | 9 | 
+----+------+ 
2 rows in set (0.04 sec) 

mysql> select * from bool_test where flag is not false; 
+----+------+ 
| id | flag | 
+----+------+ 
| 1 | 1 | 
| 3 | 9 | 
| 4 | NULL | 
+----+------+ 
3 rows in set (0.00 sec) 

मेरा प्रश्न है: is/is not और =/!=true/false के साथ उपयोग करने के लिए सलाह दी जाती है? विक्रेता कौन सा स्वतंत्र है?

उत्तर

20

MySQL वास्तव में आपको बेवकूफ़ बना रहा है। यह doesn't have a boolean column type at all:

BOOL, BOOLEAN

इन प्रकार के TINYINT(1) के लिए समानार्थक शब्द हैं। शून्य का मान झूठा माना जाता है। अशून्य मान सच माना जाता है:

इसके अलावा, boolean literals are not such:

स्थिरांक TRUE और FALSE क्रमश: 1 और 0 के लिए मूल्यांकन करते हैं।

यह देखते हुए कि:

  • कई डाटाबेस सिस्टम बूलियन्स या तो (कम से कम नहीं मानक SQL और स्तंभ प्रकार में)
  • MySQL लागू करने के लिए एक आसान तरीका नहीं है की जरूरत नहीं है 0 या 1BOOLEAN
में

मेरा निष्कर्ष होगा:

  • आपको WHERE IS flag या केवल WHERE flag का उपयोग करना होगा क्योंकि = बस सही तरीके से काम नहीं करता है। कौन सा, संभवतः वरीयता का मामला है।
  • जो भी आप चुनते हैं, कोई विकल्प विक्रेता स्वतंत्र नहीं होगा। उदाहरण के लिए, ओरेकल उनमें से किसी भी को भी नहीं चलाएगा।

संपादित करें: पार मंच बहुत जरूरी है अगर, मैं इस के लिए जाना चाहते हैं:

WHERE flag=0 
WHERE flag<>0 

मुझे यकीन है कि हम सब यह समय की बहुत सारी किया है हूँ।

+2

'जहां ध्वज' सही तरीके से काम करता है। –

+0

@ypercube सूचक के लिए धन्यवाद, मैंने इसे प्रश्न में संपादित किया है। –

+2

मैं परीक्षण चलाता हूं, 'जहां 1 = 1' ठीक काम करता है,' कहां 1' नहीं है। पागल। मेरी दुनिया आज दुखी हो गई। –

संबंधित मुद्दे

 संबंधित मुद्दे