BOOLEAN या टिनिअंट भ्रम


91

मैं एक साइट के लिए एक डेटाबेस डिजाइन कर रहा था जहां मुझे केवल 2 राज्यों को सही या गलत स्टोर करने के लिए बूलियन डेटाटाइप का उपयोग करने की आवश्यकता है। मैं MySQL का उपयोग कर रहा हूं।
PhpMyAdmin का उपयोग करते हुए डेटाबेस को डिजाइन करते समय, मैंने पाया कि मेरे पास BOOLEAN डेटाटाइप और TINYINT डेटाटाइप दोनों हैं।
मैं अलग-अलग लेखों के माध्यम से गया, कुछ ने कहा कि टिनटॉन बोओलेन के समान है, कोई अंतर नहीं है। कुछ का कहना है कि BOOLEAN को MySQL में TINYINT में बदल दिया गया है।

मेरा सवाल है, अगर वे दोनों एक ही हैं तो दो क्यों मौजूद हैं? उनमें से केवल एक होना चाहिए।

यहाँ मेरे द्वारा पढ़े गए लेखों का संदर्भ है:
http://www.careerride.com/MySQL-BOOL-TINYINT-BIT.aspx
http://dev.mysql.com/doc/refman/5.5/en/numeric-type -overview.html

जवाबों:


137

MySQL में आंतरिक बूलियन डेटा प्रकार नहीं है। यह सबसे छोटे पूर्णांक डेटा प्रकार - TINYINT का उपयोग करता है।

BOOLEAN और BOOL TINYINT (1) के समतुल्य हैं, क्योंकि वे समानार्थी हैं।

इस तालिका को बनाने का प्रयास करें -

CREATE TABLE table1 (
  column1 BOOLEAN DEFAULT NULL
);

फिर SHOW CREATE TABLE चलाएं, आपको यह आउटपुट मिलेगा -

CREATE TABLE `table1` (
  `column1` tinyint(1) DEFAULT NULL
)

1
लेकिन आपका जवाब अन्य सभी पहलुओं में सही है। ओपी को भ्रमित करने के लिए जो प्रतीत होता है वह पर्यायवाची शब्द है।
ypercube y

2
ऐसा लगता है कि यह पिछड़ी अनुकूलता के लिए किया गया है। BOOLEAN डेटा प्रकार MySQL 5 से पहले था और BIT प्रकार को अनुकूलित नहीं किया गया था, यह TINYINT भी था। प्रलेखन से - नई सुविधाएँ 5.1 के लिए नियोजित: बिट लेने के लिए बीआईटी प्रकार का अनुकूलन करें। (बीआईटी अब एक बाइट लेता है; इसे टिनिट के पर्याय के रूप में माना जाता है।)
देवरत

5
हाँ, आप जानते हैं कि कर सकते हैं BIT(1)या BIT(17)या यहाँ तक किBIT(64)
ypercubeᵀᴹ

3
@Devart - जहां आपके उत्तर में सबसे अधिक वोट हैं और पहले (मेरी सूची में वैसे भी) दिखाई देता है और कुछ समय बीत चुका है, क्या कोई मौका है कि आप अपने जवाब में जोड़ने के लिए तैयार रहें, जिसमें MySQL 5.1 पर BIT प्रकार की कुछ चर्चा शामिल है। बाद में?
जोनाथन

3
@ जोनाथन शायद यह उल्लेख कर रहे हैं कि यह मूल्यवान है, हालांकि BIT (1) वास्तव में TINYINT (1) की तुलना में किसी भी कम स्थान का उपयोग नहीं करता है और मानक mysql कंसोल का उपयोग करते समय अधिकांश लोग उम्मीद नहीं करेंगे। उस नकारात्मक पहलू के कारण, और कोई भंडारण लाभ नहीं है, सिर्फ टिनिनेट (1) या बोओलेन का उपयोग करना मेरे अनुभव में सबसे आम लगता है।
टायलर स्मिथ

31

बस php डेवलपर्स के लिए एक नोट (मैं एक टिप्पणी के रूप में पोस्ट करने के लिए आवश्यक स्टैन्कवरफ्लो पॉइंट्स की कमी है) ... TINYINT के लिए स्वचालित (और चुप) रूपांतरण का मतलब है कि php "BOOLEAN" कॉलम से "0" या के रूप में एक मान प्राप्त करता है "1", अपेक्षित (मेरे द्वारा) सही / गलत नहीं।

एक डेवलपर जो SQL को देख रहा है वह एक तालिका बनाता है और कुछ इस तरह देखता है: "some_boolean BOOLEAN NOT NULL DEFAULT FALSE," उस कॉलम को प्राप्त करने वाली पंक्ति के सही / गलत परिणामों को देखने के लिए यथोचित अपेक्षा कर सकता है। इसके बजाय (कम से कम मेरे PHP के संस्करण में), परिणाम "0" या "1" होगा (हाँ, एक स्ट्रिंग "0" या स्ट्रिंग "1", एक इंट 0/1 नहीं, धन्यवाद php)।

यह एक नाइट है, लेकिन यूनिट परीक्षणों को विफल करने के लिए पर्याप्त है।


2
एक अतिरिक्त नोट के रूप में, PHP के mysql ड्राइवर स्ट्रिंग के रूप में सभी पूर्णांक प्रकारों में खींचते हैं।
kojow7

24

नवीनतम MySQL संस्करणों में नया BITडेटा प्रकार होता है जिसमें आप फ़ील्ड में बिट्स की संख्या निर्दिष्ट कर सकते हैं, उदाहरण के BIT(1)लिए Booleanटाइप के रूप में उपयोग करने के लिए , क्योंकि यह केवल 0या हो सकता है 1


7

MySql 5.1 संस्करण संदर्भ के रूप में

BIT(M) =  approximately (M+7)/8 bytes, 
BIT(1) =  (1+7)/8 = 1 bytes (8 bits)

================================================== =======================

TINYINT(1) take 8 bits.

https://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html#data-types-storage-reqs-numeric


1
आपका संदर्भ कहता है कि आवश्यक संग्रहण वास्तव में "लगभग (M + 7) / 8 बाइट्स" है। यानी, यह अगले पूर्ण बाइट तक गोल होता है। इस प्रकार यह 1 बिट नहीं लेता है।
मप्र १५'१ '

3

MySQL के लिए संख्यात्मक प्रकार अवलोकन: BOOL, BOOLEAN: ये प्रकार TINYINT (1) के लिए समानार्थक हैं। शून्य का मान गलत माना जाता है। नॉनजेरो वैल्यू को सच माना जाता है।

यहां देखें: https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.