चयन करते समय MySQL BIT फ़ील्ड मान नहीं देख सकता




(4)

my_table में enabled फ़ील्ड है, जिसे इस प्रकार परिभाषित किया गया है: enabled BIT NOT NULL DEFAULT 0

इस तालिका में enabled = b'0' साथ कई पंक्तियाँ हैं, और enabled = b'1' साथ कई पंक्तियाँ हैं।

हालाँकि, यह दोनों:

SELECT * from my_table WHERE enabled = b'0';

और इस:

SELECT * from my_table WHERE enabled = b'1';

enabled कॉलम में रिक्त दिखाएं:

+----+---------+
| id | enabled |
+----+---------+
|  1 |         |
|  2 |         |
+----+---------+

ऐसा क्यों है? मैं enabled फ़ील्ड का मूल्य कैसे देख सकता हूं?

$ mysql --version
mysql  Ver 14.14 Distrib 5.1.63, for debian-linux-gnu (x86_64) using readline 6.1

बिट मान को बाइनरी मान के रूप में लौटाया जाता है। उन्हें मुद्रण योग्य रूप में प्रदर्शित करने के लिए, 0 जोड़ें या BIN () जैसे रूपांतरण फ़ंक्शन का उपयोग करें।

https://dev.mysql.com/doc/refman/5.7/en/bit-field-literals.html


आप SELECT enabled&1 from my_table भी ट्राई कर सकते हैं।


टर्मिनल में आप इसे नहीं देख सकते हैं इसका कारण यह है कि बिट मान गैर प्रिंट करने योग्य वर्ण हैं।

निम्नलिखित मान सम्मिलित करें:

INSERT INTO `my_table` (`ID`, `enabled`)
VALUES (1,b'1'),(2,b'0');

फिर उन्हें फ़ाइल करने के लिए चुनें:

mysql> SELECT * FROM my_table INTO OUTFILE '/tmp/my_table.txt' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';

पहले हमारी /tmp/my_table.txt फ़ाइल को सादे पाठ के रूप में देखने /tmp/my_table.txt :

"1", ""
"2", ""

और फिर हेक्स दृश्य में:

२२ ३१ २२ २ सी २२ ०१ २२ एए २२ ३२ २२ २ सी २२ ०० २२ ए

उन मूल्यों को देखने में सक्षम होने के लिए जिन्हें आप केवल SELECT में CAST कर सकते हैं:

SELECT id, CAST(enabled AS UNSIGNED) AS enabled FROM my_table

और वह निम्न उत्पादन का उत्पादन करेगा:

+----+---------+
| id | enabled |
+----+---------+
|  1 |       1 |
|  2 |       0 |
+----+---------+
2 rows in set (0.00 sec)

सबसे सरल तरीका ORD फ़ंक्शन है:

SELECT ORD(`enabled`) AS `enabled` FROM `my_table`






bit