2009-05-08 9 views
26

हाय मैं हाइबरनेट और माइस्क्ल का उपयोग कर रहा हूं। मेरे पास 'सक्रिय' नामक बूलियन विशेषता वाला एक वर्ग है।MySQL: कॉलम से पूछताछ कैसे करें जिसका प्रकार थोड़ा है?

जेनरेट की गई डेटाबेस तालिका में बीआईटी डेटा प्रकार है। अब तक सब ठीक है। मैं इस मूल्य से पूछना चाहता हूं लेकिन मुझे नहीं पता कि यह कैसे करना है। मैं

SELECT * from table where active = 1 

की कोशिश की है काम नहीं करता है, न तो निम्नलिखित

SELECT * from table where active = true 

मैं न तो संदर्भ मैनुअल में है और न ही Stackoveflow पर कुछ भी नहीं मिला।

कोई संकेत?

अग्रिम धन्यवाद!

उत्तर

35
SELECT * FROM table WHERE active = (1) 
+0

आपका जवाब सही है। मुझे यह संकेत नहीं पता था। – Luixv

7

बिट मान निर्दिष्ट करने के लिए, b'value 'नोटेशन का उपयोग किया जा सकता है।

+0

सच। मैं उपयोगकर्ता मैनुअल पर नहीं मिला। – Luixv

+0

@ लुईक्सव - http://dev.mysql.com/doc/refman/5.5/en/bit-type.html –

+0

@ अलवारो: यह प्रश्न लगभग 4 साल पुराना है! – Luixv

19

this page के अनुसार, बीआईटी 5.012 से पहले संस्करणों के लिए TINYINT (1) का पर्याय है।

क्या आपने इनका प्रयास किया है?

SELECT * from table where active = (1) 
SELECT * from table where active = 'true' 
SELECT * from table where active = b'1' 

यह blog entry बीआईटी डेटा प्रकार से पूरी तरह से बचने का सुझाव देता है।

+0

पहली और तीसरी प्रविष्टि कोरियत है जबकि दूसरा काम नहीं करता है, कम से कम मेरे MySQL स्थापना के तहत। फिर भी धन्यवाद। बीआईटी डेटा प्रकार से बचने के लिए – Luixv

+0

@Andomar असहमत। नुकसान पुराने संस्करणों के साथ अंतःक्रियाशीलता है, मानते हुए कि आपको इसकी आवश्यकता नहीं है, बीआईटी वास्तव में डेटा को अधिक कॉम्पैक्टली स्टोर करता है और इसलिए स्टोरेज स्पेस को बचाता है। – Pacerier

7

मैं उपयोग एमएस एसक्यूएल समय के सबसे अधिक तो मुझे माफ कर दो अगर यह काम नहीं करता है के रूप में मैं यह परीक्षण नहीं कर सकते आप तुलना

SELECT * from table where cast(active as unsigned) = 1 

के लिए एक पूर्णांक के लिए यह कास्टिंग कोशिश की है।

+0

आपका उत्तर सही है, बहुत बहुत धन्यवाद। – Luixv

6

असल में MySQL में निर्मित बिट शाब्दिक गया है:

select*from table where active = 0b1 
0

खैर, दोनों तुलना और अद्यतन, 0 और 1 मेरे लिए काम करने के लिए:

यहाँ प्रकार बिट (1), एक के एक क्षेत्र है पंक्ति, क्षेत्र वर्तमान में गलत है:

mysql> select isfeatured from nodes where isfeatured = 1; 
Empty set (0.00 sec) 

mysql> select isfeatured from nodes where isfeatured = 0; 
+------------+ 
| isfeatured | 
+------------+ 
|   | 
+------------+ 
1 row in set (0.00 sec) 

अद्यतन isfeatured में 1 से 0 से बदल रहा है, जो प्रकार बिट (1) ...

mysql> update nodes set isfeatured=1 where isfeatured = 0; 
Query OK, 1 row affected (0.05 sec) 
Rows matched: 1 Changed: 1 Warnings: 0 

एक पंक्ति बदल ... इसे फिर से प्रयास करें:

mysql> update nodes set isfeatured=1 where isfeatured = 0; 
Query OK, 0 rows affected (0.00 sec) 
Rows matched: 0 Changed: 0 Warnings: 0 

कोई पंक्ति के रूप में उम्मीद बदल दिया है।

से पहले के रूप में एक ही चयन क्वेरी:

mysql> select isfeatured from nodes where isfeatured = 1; 
+------------+ 
| isfeatured | 
+------------+ 
|   | 
+------------+ 
1 row in set (0.00 sec) 

mysql> select isfeatured from nodes where isfeatured = 0; 
Empty set (0.01 sec) 

देखें, यह काम करता है।

मैं उपयोग कर रहा हूँ:

mysql वर 14.14 Distrib 5.5.31, डेबियन-linux-जीएनयू (x86_64) ReadLine 6 उपयोग करने के लिए।2

और

/usr/sbin/mysqld 5.5.31-0 वर + wheezy1 x86_64 ((डेबियन)) पर डेबियन-लिनक्स GNU के लिए

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