MySQL में बूलियन डेटा टाइप: TINYINT(1), BOOL, BOOLEAN — सभी समानार्थी हैं
मुख्य तथ्य:
BOOLऔरBOOLEANTINYINT(1)के समानार्थी (synonyms) हैं- आंतरिक रूप से MySQL इन्हें
TINYINT(1)में बदल देता है - स्टोरेज: 1 बाइट (रेंज: -128 से 127 साइनड, 0 से 255 अनसाइनड)
0= FALSE,1= TRUE (कोई भी गैर-शून्य = TRUE)
व्यावहारिक प्रदर्शन
1. BOOL कॉलम के साथ टेबल बनाएं:
mysql> CREATE TABLE AddBoolDemo (isToggle BOOL); Query OK, 0 rows affected (1.24 sec)
2. आंतरिक प्रतिनिधित्व जांचें (SHOW CREATE TABLE):
mysql> SHOW CREATE TABLE AddBoolDemo\G
*************************** 1. row *************************** Table: AddBoolDemo Create Table: CREATE TABLE `addbooldemo` ( `isToggle` tinyint(1) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 1 row in set (0.00 sec)
पुष्टि: BOOL → tinyint(1) में बदल गया।
3. मान डालें (TRUE/FALSE/1/0):
mysql> INSERT INTO AddBoolDemo VALUES(TRUE); mysql> INSERT INTO AddBoolDemo VALUES(FALSE); mysql> INSERT INTO AddBoolDemo VALUES(1); mysql> INSERT INTO AddBoolDemo VALUES(0);
4. स्टोर किए गए मान देखें:
mysql> SELECT * FROM AddBoolDemo;
+----------+ | isToggle | +----------+ | 1 | | 0 | | 1 | | 0 | +----------+ 4 rows in set (0.00 sec)
PHP/एप्लीकेशन में उपयोग:
// PHP में
$stmt = $pdo->prepare("INSERT INTO table (bool_col) VALUES (?)");
$stmt->execute([true]); // 1 स्टोर होता है
$stmt->execute([false]); // 0 स्टोर होता है
// पढ़ते समय
$row = $stmt->fetch();
$isActive = (bool)$row['bool_col']; // 1→true, 0→false
बूलियन कॉलम पर इंडेक्स:
- कम कार्डिनैलिटी (केवल 2 मान) के कारण इंडेक्स अक्सर उपयोगी नहीं होता
- कंपोजिट इंडेक्स में उपयोगी हो सकता है:
INDEX (is_active, created_at) - पार्शनिंग के लिए बेहतर विकल्प
सर्वोत्तम अभ्यास:
- स्कीमा में
BOOLEANयाBOOLलिखें (पठनीयता के लिए) - एप्लीकेशन कोड में भाषा के बूलियन लिटरल उपयोग करें
IS TRUE,IS FALSE,IS NOT TRUEऑपरेटर उपयोग करें:
SELECT * FROM table WHERE is_active IS TRUE; SELECT * FROM table WHERE is_active IS FALSE; SELECT * FROM table WHERE is_active IS NOT TRUE; -- NULL भी शामिल