MySQL में BIT और TINYINT में क्या अंतर है?


106

आप किन मामलों में किसका उपयोग करेंगे? क्या बहुत अंतर है? मैं आमतौर पर दृढ़ता इंजन द्वारा बूलियन्स को स्टोर करने के लिए उपयोग किया जाता है?

जवाबों:


122

TINYINT एक 8-बिट पूर्णांक मान है, एक BIT फ़ील्ड 1 बिट, BIT (1) और 64 बिट्स, BIT (64) के बीच संग्रहीत कर सकता है। एक बुलियन मूल्यों के लिए, बीआईटी (1) बहुत आम है।


10
TINYINT और BIT (8) में क्या अंतर है?
पेसरियर

16
TINYINT को हस्ताक्षरित या अहस्ताक्षरित और ऋणात्मक संख्याओं से संबंधित किया जा सकता है। बिट केवल डेटा पर हस्ताक्षर किए बिना बिट्स को संग्रहीत करता है, आपको स्वयं एमएसबी की व्याख्या करने के लिए छोड़ दिया जाता है।
परिभाषित करता है

4
भ्रम से बचने के लिए यह जोड़ा जाना चाहिए कि टिनिट और बीआईटी (1) अपनी भंडारण आवश्यकताओं में भिन्न नहीं होते हैं और यह कि BOOL और BOOLEAN TINYINT (1) न्यूमेरिक प्रकार अवलोकन के लिए समानार्थी हैं ।
टिमो स्ट्रॉटमैन

59

से संख्यात्मक प्रकार का अवलोकन ;

बीआईटी [(एम)]

एक बिट-फ़ील्ड प्रकार। M प्रति बिट की संख्या को 1 से 64 तक इंगित करता है। M को छोड़ा गया है तो डिफ़ॉल्ट 1 है।

यह डेटा प्रकार MySQL के लिए MySQL 5.0.3 में जोड़ा गया था, और 5.0.5 में MEMORY, InnoDB, BDB और NDBCLUSTER तक बढ़ाया गया था। 5.0.3 से पहले, BIT TINYINT (1) का एक पर्याय है।

TINYINT [(M)] [UNSIGNED] [ZEROFILL]

बहुत छोटा पूर्णांक। हस्ताक्षरित सीमा -128 से 127 है। अहस्ताक्षरित सीमा 0 से 255 है।

इसके अतिरिक्त इस पर विचार करें;

BOOL, BOOLEAN

ये प्रकार टिनिट (1) के पर्यायवाची हैं। शून्य का मान गलत माना जाता है। गैर-शून्य मानों को सच माना जाता है।


12
आप कह रहे हैं कि booleanएक बाइट लगेगा, भले ही यह वास्तव में थोड़ा सा हो, इसलिए v5.0.3 के बाद एक BIT (1) बेहतर है?
पचेरियर

3
हाँ @Pacerier। बूलियन बस एक संख्या क्षेत्र के लिए एक बदसूरत उपनाम है।
13एक्सल कोस्टास पेना

7
जहां तक ​​वास्तविक भंडारण की बात है, BIT (1) अभी भी एक बाइट न्यूनतम रखता है। BIT (M) = (M + 7) / 8 बाइट्स। (१ + 7) / 1 = १ बाइट। न्यूमेरिक टाइप स्टोरेज रिक्वायरमेंट्स देखें ।
द्राज़न बेज़ेलोवुक

1
दुख की बात है कि BOOL/ BOOLEANके TINYINT(1)बजाय उपनाम हैं BIT। ज़रूर, वे सभी एक पूरी बाइट पर कब्जा कर लेते हैं, लेकिन शब्दार्थ BITबहुत अधिक उपयुक्त होगा।
MestreLion

38

ये सभी सैद्धांतिक चर्चाएं महान हैं, लेकिन वास्तव में, यदि आप MySQL और वास्तव में SQLServer के लिए उपयोग कर रहे हैं, तो कम से कम, अपने बूलियंस के लिए गैर-द्विआधारी डेटा के साथ छड़ी करना सबसे अच्छा कारण है कि जब आप के साथ काम करना आसान हो 'डेटा का उत्पादन, क्वेरी करना वगैरह। यह विशेष रूप से महत्वपूर्ण है यदि आप MySQL और SQLServer (यानी आप दोनों के बीच डेटा को सिंक करते हैं) के बीच अंतर को प्राप्त करने की कोशिश कर रहे हैं, क्योंकि दोनों में BIT डेटाटाइप का हैंडलिंग अलग है। यदि आप एक संख्यात्मक डेटाटाइप के साथ चिपके रहते हैं तो आपको बहुत कम परेशानी होगी। मैं MySQL के लिए BOOL या BOOLEAN से चिपके रहने की सलाह दूंगा जो कि TINYINT (1) के रूप में संग्रहीत हो जाता है। यहां तक ​​कि जिस तरह से MySQL वर्कबेंच और MySQL एडमिनिस्ट्रेटर BIT डेटाटाइप दिखाते हैं वह अच्छा नहीं है (यह बाइनरी डेटा के लिए थोड़ा प्रतीक है)।


1
मेरी राय में यह मेरी गलती नहीं है, कि कुछ इंटरफेस आदि सही बाइनरी डेटा की गलत व्याख्या करते हैं। यदि कोई प्रशासक (स्वयं सहित) कुछ प्रतीक के बारे में शिकायत करता है (MySQL Wrokbench का उल्लेख करता है) तो यह गलती का है जिसने किसी प्रतीक के रूप में मेरे सही (द्विआधारी) डेटा की गलत व्याख्या की है जो सामग्री के बारे में कोई जानकारी नहीं देता है। इसलिए MySQL / Oracle ने गलती की और मैं केवल अपनी प्रोग्रामिंग अवधारणा को बदलने के लिए तैयार नहीं हूं क्योंकि किसी ने भी गलती की है।
Matmarbon

11

BIT को केवल 0 और 1 (और NULL की अनुमति देना चाहिए, यदि फ़ील्ड को NULL के रूप में परिभाषित नहीं किया गया है)। TINYINT (1) किसी भी मूल्य को एकल बाइट में संग्रहीत करने की अनुमति देता है, -128 ..127 या 0..255 इस पर निर्भर करता है कि यह अहस्ताक्षरित है या नहीं (1 दिखाता है कि आप केवल एक अंक का उपयोग करना चाहते हैं, लेकिन यह करता है आपको बड़ा मूल्य संचय करने से नहीं रोकते)।

5.0.3 से अधिक पुराने संस्करणों के लिए, BIT को TINYINT (1) के रूप में व्याख्या की जाती है, इसलिए वहां कोई अंतर नहीं है।

BIT में एक "यह एक बूलियन है" शब्दार्थ है, और कुछ ऐप्स TINYINT (1) को उसी तरह से विचार करेंगे (जिस तरह से MySQL ने इसका इलाज किया था), इसलिए ऐप कॉलम को चेक बॉक्स के रूप में प्रारूपित कर सकते हैं यदि वे प्रकार की जांच करते हैं और उसके आधार पर एक प्रारूप तय करें।


4

गलत हो सकता है लेकिन:

टाइनींट 0 और 255 के बीच का पूर्णांक है

बिट या तो 1 या 0 है

इसलिए मेरे लिए बिट बुलियन का विकल्प है


खेद है कि हम यहाँ T_SQL पर थे इसलिए मुझे नहीं पता
एलन हार्डी

0

अपने अनुभव से मैं आपको बता रहा हूं कि बीआईटी को लिनक्स ओएस प्रकार (उबंटू पूर्व के लिए) पर समस्या है। मैंने विंडोज़ पर अपना डीबी विकसित किया और लाइनक्स पर सब कुछ तैनात करने के बाद, मुझे उन प्रश्नों से समस्या थी जिन्हें बीआईटी डेटा टाइप के लिए टेबल से डाला या चुना गया था।

बिट अभी के लिए सुरक्षित नहीं है। मैंने टिंटिंट (1) में बदलाव किया और पूरी तरह से काम किया। मेरा मतलब है कि आपको केवल अंतर करने के लिए एक मूल्य की आवश्यकता है अगर यह 1 या 0 है और टिनीट (1) यह उसके लिए ठीक है

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