जहां तक मुझे पता है, केवल एक छोटा अंतर है जब आप सीमा से बाहर मूल्य डालने की कोशिश कर रहे हैं।
उदाहरण में मैं 401421228216
, इस्तेमाल करेंगे जो 101110101110110100100011101100010111000
(लंबाई वर्ण)
- है आप इस प्रणाली के लिए
INT(20)
है, तो इसका मतलब यह है स्मृति न्यूनतम 20 बिट्स में आवंटित। लेकिन अगर आप मूल्य प्रविष्ट किए जाने वाले से बड़े 2^20
, इसे सफलतापूर्वक संग्रहीत किया जाएगा कि, केवल अगर यह कम INT(32) -> 2147483647
(या 2 * INT(32) -> 4294967295
UNSIGNED
के लिए)
उदाहरण:
mysql> describe `test`;
+-------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| id | int(20) unsigned | YES | | NULL | |
+-------+------------------+------+-----+---------+-------+
1 row in set (0,00 sec)
mysql> INSERT INTO `test` (`id`) VALUES (401421228216);
ERROR 1264 (22003): Out of range value for column 'id' at row 1
mysql> SET sql_mode = '';
Query OK, 0 rows affected, 1 warning (0,00 sec)
mysql> INSERT INTO `test` (`id`) VALUES (401421228216);
Query OK, 1 row affected, 1 warning (0,06 sec)
mysql> SELECT * FROM `test`;
+------------+
| id |
+------------+
| 4294967295 |
+------------+
1 row in set (0,00 sec)
- हैं सिस्टम के लिए आपके पास
BIGINT(20)
है इसका मतलब है स्मृति में न्यूनतम 20 बिट्स आवंटित करें। लेकिन अगर आप मूल्य है कि बड़े से 2^20
प्रविष्ट किए जाने वाले, यह सफलतापूर्वक संग्रहीत किया जाएगा अगर यह कम BIGINT(64) -> 9223372036854775807
(या 2 * BIGINT(64) -> 18446744073709551615
UNSIGNED
के लिए)
उदाहरण:
mysql> describe `test`;
+-------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------+------+-----+---------+-------+
| id | bigint(20) unsigned | YES | | NULL | |
+-------+---------------------+------+-----+---------+-------+
1 row in set (0,00 sec)
mysql> INSERT INTO `test` (`id`) VALUES (401421228216);
Query OK, 1 row affected (0,04 sec)
mysql> SELECT * FROM `test`;
+--------------+
| id |
+--------------+
| 401421228216 |
+--------------+
1 row in set (0,00 sec)
स्रोत
2017-10-12 14:14:17
वाह, इस पोस्ट ने इस विषय पर पूरी तरह से भ्रम को मंजूरी दे दी। डेवलपर्स द्वारा एक अजीब पसंद की तरह लगता है - जैसा कि मैंने अनुमान लगाया होगा कि यह चौड़ाई + अधिकतम मूल्य, या बिट्स/आदि था। – Sh4d0wsPlyr
'यह केवल जेरोफिल विकल्प को प्रभावित करता है:' अब मेरी जिज्ञासा – Umair
समाप्त होती है, मैं वास्तव में चाहता हूं कि उन्होंने आईएनटी के बजाय जेरोफिल पर डिस्प्ले के साथ वाक्यविन्यास तैयार किया हो। उदाहरण: 'बार INT ZEROFILL (20)'। यह बहुत अधिक स्पष्ट होता। लेकिन यह निर्णय बहुत समय पहले बनाया गया था, और अब इसे बदलकर लाखों डेटाबेस प्रतिष्ठानों को तोड़ दिया जाएगा। –