MySQL SET डेटा टाइप पर +0 का प्रभाव: बिटमास्क मान प्राप्त करना
MySQL में SET डेटा टाइप आंतरिक रूप से बिटमास्क के रूप में संग्रहीत होता है। इस पर +0 (या CAST(... AS UNSIGNED)) लागू करने से इसका संख्यात्मक बिटमास्क मान प्राप्त होता है।
उदाहरण
CREATE TABLE SetZeroDemo (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
TechnicalSkills SET('C', 'Spring Framework/Hibernate', 'Python', 'Django Framework', 'Core Java') NOT NULL
);
INSERT INTO SetZeroDemo (TechnicalSkills)
VALUES ('C,Spring Framework/Hibernate,Python,Django Framework,Core Java');
क्वेरी
SELECT TechnicalSkills, TechnicalSkills+0 AS BitmaskValue FROM SetZeroDemo;
आउटपुट
+-----------------------------------------------------------------+--------------+ | TechnicalSkills | BitmaskValue | +-----------------------------------------------------------------+--------------+ | C,Spring Framework/Hibernate,Python,Django Framework,Core Java | 31 | +-----------------------------------------------------------------+--------------+
गणना कैसे होती है
SET सदस्यों को 0-आधारित सूचकांक दिया जाता है। प्रत्येक चयनित सदस्य संबंधित बिट सेट करता है:
सदस्य सूचकांक: 0 1 2 3 4 मान: C Spring/Hibernate Python Django Framework Core Java बिट मान: 2^0=1 2^1=2 2^2=4 2^3=8 2^4=16 योग: 1 + 2 + 4 + 8 + 16 = 31
उपयोग केस
- बिटवाइज़ ऑपरेशन (
&,|,^) द्वारा सेट सदस्यता जांचना/बदलना। - उदाहरण:
WHERE (skills + 0) & 4→ Python कौशल वाले रिकॉर्ड। - संख्यात्मक मान को वापस SET स्ट्रिंग में बदलने के लिए
CAST(31 AS CHAR)उपयोग करें (MySQL स्वचालित रूप से करता है)।
सीमाएं
- SET अधिकतम 64 सदस्य तक सीमित (64-बिट पूर्णांक)।
- सदस्य नाम में कॉमा (,) नहीं हो सकता।
- बड़े सेट के लिए अलग लुकअप टेबल (many-to-many) बेहतर है।