MySQL में UNSIGNED: केवल गैर-ऋणात्मक संख्याएं
UNSIGNED एक संख्यात्मक डेटा प्रकार विशेषता है जो कॉलम को केवल गैर-ऋणात्मक मान (0 और धनात्मक) संग्रहीत करने के लिए प्रतिबंधित करती है। यह प्रभावी रूप से ऊपरी रेंज को दोगुना कर देती है।
रेंज तुलना
| प्रकार | SIGNED (डिफ़ॉल्ट) | UNSIGNED |
|---|---|---|
| TINYINT | -128 से 127 | 0 से 255 |
| SMALLINT | -32,768 से 32,767 | 0 से 65,535 |
| MEDIUMINT | -8,388,608 से 8,388,607 | 0 से 16,777,215 |
| INT | -2,147,483,648 से 2,147,483,647 | 0 से 4,294,967,295 |
| BIGINT | -9.22e18 से 9.22e18 | 0 से 1.84e19 |
उदाहरण
1. UNSIGNED कॉलम के साथ टेबल बनाएं
mysql> CREATE TABLE UnsignedDemoWithPositiveValue (
-> Distance INT UNSIGNED
-> );
2. सीमा से बाहर मान का प्रयास
mysql> INSERT INTO UnsignedDemoWithPositiveValue VALUES(4294967296); ERROR 1264 (22003): Out of range value for column 'Distance' at row 1
3. अधिकतम मान डालें
mysql> INSERT INTO UnsignedDemoWithPositiveValue VALUES(4294967295); Query OK, 1 row affected
4. ऋणात्मक मान का प्रयास
mysql> INSERT INTO UnsignedDemoWithPositiveValue VALUES(-124); ERROR 1264 (22003): Out of range value for column 'Distance' at row 1
5. वैध धनात्मक मान डालें
mysql> INSERT INTO UnsignedDemoWithPositiveValue VALUES(124); Query OK, 1 row affected
6. परिणाम देखें
mysql> SELECT * FROM UnsignedDemoWithPositiveValue;
+------------+ | Distance | +------------+ | 4294967295 | | 124 | +------------+
कब उपयोग करें
- आईडी/ऑटो-इन्क्रीमेंट: प्राइमरी की के लिए मानक (ऋणात्मक कभी नहीं)
- काउंटर/मात्रा: इन्वेंट्री, लाइक काउंट, व्यू काउंट
- बड़ी धनात्मक संख्याएं: जब SIGNED रेंज अपर्याप्त हो लेकिन BIGINT ओवरकिल हो
- बिटमास्क/फ्लैग: बिटवाइज़ ऑपरेशन के लिए
कब बचें
- ऋणात्मक मान संभव हों (तापमान, वित्तीय शेष, निर्देशांक)
- पोर्टेबिलिटी आवश्यक हो (कुछ DBMS UNSIGNED का समर्थन नहीं करते)
- एप्लिकेशन लेयर ऋणात्मक मान पास कर सकती हो
नोट
MySQL 8.0.17+ में, ZEROFILL निहित रूप से UNSIGNED जोड़ता है। भविष्य के संस्करणों में ZEROFILL अप्रचलित हो सकता है।