बूलियन/फ्लैग मानों के लिए TINYINT(1) का उपयोग
MySQL में बूलियन फ्लैग (0/1, true/false) स्टोर करने के लिए TINYINT(1) सबसे उपयुक्त और आमतौर पर उपयोग किया जाने वाला डेटा प्रकार है।
सिंटैक्स
yourColumnName TINYINT(1) DEFAULT 1;
उदाहरण
1. टेबल बनाना
mysql> CREATE TABLE DemoTable (
ClientId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ClientName VARCHAR(20),
isMarried TINYINT(1) DEFAULT 1
);
Query OK, 0 rows affected (0.64 sec)
2. डेटा डालना
mysql> INSERT INTO DemoTable(ClientName, isMarried) VALUES('Larry', 0);
mysql> INSERT INTO DemoTable(ClientName) VALUES('David'); -- डिफ़ॉल्ट 1 उपयोग होगा
mysql> INSERT INTO DemoTable(ClientName, isMarried) VALUES('Mike', 1);
mysql> INSERT INTO DemoTable(ClientName) VALUES('Carol'); -- डिफ़ॉल्ट 1 उपयोग होगा
3. रिकॉर्ड्स देखना
mysql> SELECT * FROM DemoTable;
+----------+------------+-----------+ | ClientId | ClientName | isMarried | +----------+------------+-----------+ | 1 | Larry | 0 | | 2 | David | 1 | | 3 | Mike | 1 | | 4 | Carol | 1 | +----------+------------+-----------+ 4 rows in set (0.00 sec)
डेटा प्रकार तुलना
| डेटा प्रकार | स्टोरेज | रेंज | उपयोग |
|---|---|---|---|
| TINYINT(1) | 1 बाइट | -128 से 127 (साइन) / 0 से 255 (अनसाइन्ड) | ✅ फ्लैग के लिए सर्वश्रेष्ठ |
| BOOLEAN / BOOL | 1 बाइट | TINYINT(1) का पर्यायवाची | ✅ समान, अधिक पठनीय |
| BIT(1) | ~1 बाइट | 0 या 1 | ⚠️ डिस्प्ले समस्याएं (बाइनरी दिखाता है) |
| CHAR(1) | 1 बाइट + ओवरहेड | 'Y'/'N', 'T'/'F' | ❌ स्टोरेज वेस्ट, तुलना धीमी |
| ENUM('0','1') | 1-2 बाइट | केवल सूचीबद्ध मान | ⚠️ ओवरहेड अधिक |
TINYINT(1) के फायदे
- कम स्टोरेज: केवल 1 बाइट प्रति पंक्ति
- तेज़ तुलना: पूर्णांक तुलना स्ट्रिंग से तेज़
- इंडेक्स के अनुकूल: छोटे इंडेक्स, तेज़ खोज
- डिफ़ॉल्ट मान: DEFAULT 0 या 1 सेट करना आसान
- एप्लिकेशन में आसान: अधिकांश भाषाओं में बूलियन में मैप होता है
MySQL में BOOLEAN
MySQL में BOOLEAN और BOOL वास्तव में TINYINT(1) के पर्यायवाची हैं:
CREATE TABLE DemoTable (
isActive BOOLEAN DEFAULT TRUE,
isDeleted BOOL DEFAULT FALSE
);
क्वेरी में उपयोग
-- 1/0 के रूप में
SELECT * FROM DemoTable WHERE isMarried = 1;
-- बूलियन कॉन्टेक्स्ट में (MySQL में TRUE=1, FALSE=0)
SELECT * FROM DemoTable WHERE isMarried;
-- केस स्टेटमेंट के साथ
SELECT ClientName,
CASE isMarried WHEN 1 THEN 'Married' ELSE 'Single' END AS Status
FROM DemoTable;
BIT(1) की समस्या
mysql> CREATE TABLE TestBit (flag BIT(1)); mysql> INSERT INTO TestBit VALUES(1), (0); mysql> SELECT * FROM TestBit; +------+ | flag | +------+ | | -- अदृश्य बाइनरी कैरेक्टर | | +------+ mysql> SELECT flag+0 FROM TestBit; -- दृश्यमान बनाने के लिए +--------+ | flag+0 | +--------+ | 1 | | 0 | +--------+