टॉलिंट (N) का अर्थ क्या है?


17

जब हम संख्यात्मक डेटा प्रकारों के साथ एक तर्क लंबाई का उपयोग करते हैं, जहां तक ​​मुझे पता है कि यह प्रदर्शन चौड़ाई को निर्दिष्ट करता है।
मैंने निम्नलिखित कोशिश की:

mysql> create table boolean_test (var1 boolean, var2 tinyint);    
Query OK, 0 rows affected (0.10 sec)   

mysql> show create table boolean_test;   
+--------------+-------------------------   
| Table        | Create Table
+--------------+-------------------------  
| boolean_test | CREATE TABLE `boolean_test` (  
  `var1` tinyint(1) DEFAULT NULL,  
  `var2` tinyint(4) DEFAULT NULL  
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |   
+--------------+---------------------------  
1 row in set (0.00 sec)  

सबसे पहले छोटे टिंट का मूल्य 1 बाइट होता है। तो इसका अर्थ क्या है tinyint(4)? 4 अंक नहीं हो सकते।

mysql> insert into boolean_test values(101,112);  
Query OK, 1 row affected (0.03 sec)   

mysql> select * from boolean_test;  
+------+------+  
| var1 | var2 |  
+------+------+  
|   10 |  112 |  
|  101 |  112 |  
+------+------+  
2 rows in set (0.00 sec)  

मैं देख रहा हूं कि छोटे में मैंने एक १० और १०१ को संग्रहीत किया है और मैं इन मूल्यों को वापस पा सकता हूं, इसके बावजूद कि इसे टिंटिंट (१) के रूप में परिभाषित किया गया है।
क्या मुझे 1 नहीं देखना चाहिए var1? यानी सिर्फ 1 डिस्प्ले अंक?


एक डालने के बाद आपके पास दो पंक्तियाँ क्यों हैं? मैं इस कोड को पूरी तरह से समझ नहीं सकता।
वुड्रोशाइगरु

जवाबों:


24

डाटा के लिहाज से, tinyint(1), tinyint(2), tinyint(3)आदि सब बिल्कुल एक जैसे हैं। वे सभी -128 में 127 के लिए SIGNEDया 0-255 के लिए हैं UNSIGNED। अन्य उत्तरों के अनुसार कोष्ठक में संख्या केवल एक प्रदर्शन चौड़ाई संकेत है।

आप नोट करना चाह सकते हैं, हालांकि, उस एप्लिकेशन = बुद्धिमान चीजें अलग दिख सकती हैं। यहां, tinyint(1)एक विशेष अर्थ ले सकते हैं। उदाहरण के लिए, कनेक्टर / जे (जावा कनेक्टर) tinyint(1)एक बूलियन मान के रूप में व्यवहार करता है , और आवेदन के लिए एक संख्यात्मक परिणाम वापस करने के बजाय, यह मूल्यों को trueऔर में परिवर्तित करता है false। इसे tinyInt1isBit=falseकनेक्शन पैरामीटर के माध्यम से बदला जा सकता है ।


13

एक छोटे कद (1) की संख्या -128 में 127 से संख्या धारण कर सकते हैं, क्योंकि डेटाटाइप 8 बिट्स (1 बाइट) होने के कारण - जाहिर है कि एक अहस्ताक्षरित टिनीट मान 0-255 मान सकता है।

यह चुपचाप सीमा मूल्यों से बाहर निकल जाएगा:

mysql> create table a
    -> (
    ->    ttt tinyint(1)
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> insert into a values ( 127 );
Query OK, 1 row affected (0.00 sec)

mysql> insert into a values ( -128 );
Query OK, 1 row affected (0.00 sec)

mysql> insert into a values ( 128 );
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> insert into a values ( -129 );
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from a;
+------+
| ttt  |
+------+
|  127 |
| -128 |
|  127 |
| -128 |
+------+
4 rows in set (0.00 sec)

mysql>

... जब तक आप sql_modeसर्वर कॉन्फ़िगरेशन को बदलते या बदलते नहीं हैं:

mysql> set sql_mode=STRICT_ALL_TABLES;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into a values ( -129 );
ERROR 1264 (22003): Out of range value for column 'ttt' at row 1
mysql>

डेटाटाइप के लिए डीडीएल में उपयोग किया जाने वाला मान (उदाहरण: टिनींट (1)) है, जैसा कि आपको संदेह है, डिस्प्ले की चौड़ाई। हालाँकि, यह वैकल्पिक है और ग्राहकों को इसका उपयोग करने की आवश्यकता नहीं है। उदाहरण के लिए, मानक MySQL क्लाइंट इसका उपयोग नहीं करता है।

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