phpMyAdmin
 sql >> डेटाबेस >  >> Database Tools >> phpMyAdmin

TINYINT(1) एक बूलियन के रूप में कार्य क्यों करता है लेकिन INT(1) नहीं करता है?

एक MySQL पूर्णांक प्रकार के लिए कोष्ठक में (1) का डेटा प्रकार द्वारा स्वीकार किए गए मानों की श्रेणी, या इसे कैसे संग्रहीत किया जाता है, से कोई लेना-देना नहीं है। यह सिर्फ दिखाने के लिए है।

मेरा जवाब भी देखें MySQL:BigInt(20) बनाम Int(20) आदि ।

TINYINT, TINYINT(1) या TINYINT(2) या TINYINT(64) से अलग नहीं है। यह एक 8-बिट हस्ताक्षरित पूर्णांक डेटा प्रकार है, और यह -128 से 127 तक किसी भी 8-बिट पूर्णांक मान को स्वीकार करता है।

mysql> create table b (i tinyint(1));

mysql> insert into b values (42);

mysql> select * from b;
+------+
| i    |
+------+
|   42 |
+------+

सुविधा के लिए, MySQL बूल के लिए एक उपनाम का समर्थन करता है, जिसे तुरंत TINYINT(1) द्वारा बदल दिया जाता है।

mysql> create table b2 (i bool);

mysql> show create table b2;

CREATE TABLE `b2` (
  `i` tinyint(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1

जैसा कि मैंने कहा, (1) का उपयोग लगभग कुछ भी नहीं है, यह केवल एक सम्मेलन है ताकि यदि आप टिन्यिनट (1) देखते हैं तो यह मानना ​​​​उचित है कि कॉलम इरादा है एक बूलियन के रूप में इस्तेमाल किया जाना है। लेकिन MySQL में कुछ भी आपको इसमें अन्य पूर्णांक मानों को संग्रहीत करने से नहीं रोकता है।

यदि आप चाहते हैं कि कोई कॉलम केवल accept स्वीकार करे 0 या 1, आप BIT(1):

. का उपयोग कर सकते हैं
mysql> create table b3 (i bit(1));

mysql> insert into b3 values (0), (1);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> insert into b3 values (-1);
ERROR 1406 (22001): Data too long for column 'i' at row 1

mysql> insert into b3 values (2);
ERROR 1406 (22001): Data too long for column 'i' at row 1

हालांकि यह TINYINT की तुलना में कोई स्थान नहीं बचाता है, क्योंकि किसी दिए गए कॉलम का संग्रहण निकटतम बाइट तक होता है।

पुनश्च:@samdy1 के उत्तर के बावजूद, TINYINT स्ट्रिंग्स . को संग्रहीत नहीं करता है '0' या '1' बिल्कुल, यह पूर्णांक . को संगृहीत करता है 0 या 1 , साथ ही -128 से 127 तक के अन्य पूर्णांक। SQL में पूर्णांकों को उद्धृत करने की कोई आवश्यकता नहीं है, और मुझे अक्सर आश्चर्य होता है कि इतने सारे डेवलपर ऐसा क्यों करते हैं।



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. PhpMyAdmin के साथ डेटाबेस तालिकाओं में फ़ील्ड को संशोधित करना

  2. PhpMyAdmin अनुक्रमणिका साइट लोड नहीं कर सकता

  3. V4.8.0 में अपडेट करने के बाद phpMyAdmin में त्रुटि:$cfg['TempDir'] (./tmp/) पहुंच योग्य नहीं है

  4. phpMyAdmin सभी पंक्तियों को नहीं दिखा रहा है - दिखाए गए कुल रिकॉर्ड की गलत संख्या

  5. PHP क्वेरी का उपयोग करके तालिका बदलें, कॉलम नाम phpMyAdmin में दिखाई नहीं देता है