MySQL-এ SET ডেটা টাইপের কলামে +0 যোগ করলে সেট মানটি এর বিটম্যাস্ক (bitmask) ইন্টিজার রূপে রিটার্ন হয়। প্রতিটি সেট সদস্যের একটি বিট পজিশন থাকে।
উদাহরণ
CREATE TABLE set_zero_demo (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
technical_skills SET('C', 'Spring Framework/Hibernate', 'Python', 'Django Framework', 'Core Java') NOT NULL
);
INSERT INTO set_zero_demo (technical_skills) VALUES
('C,Spring Framework/Hibernate,Python,Django Framework,Core Java');
সেট মান +0 সহ
SELECT technical_skills, technical_skills + 0 AS bitmask_value
FROM set_zero_demo;
ফলাফল
+-----------------------------------------------------------------+---------------+
| technical_skills | bitmask_value |
+-----------------------------------------------------------------+---------------+
| C,Spring Framework/Hibernate,Python,Django Framework,Core Java | 31 |
+-----------------------------------------------------------------+---------------+
কেন ৩১? — বিট গণনা
৫টি সদস্য থাকায় বিট পজিশন ০ থেকে ৪:
2^0 + 2^1 + 2^2 + 2^3 + 2^4
= 1 + 2 + 4 + 8 + 16
= 31
| সদস্য | পজিশন | বিট মান | দশমিক |
|---|---|---|---|
| C | 0 | 2⁰ | 1 |
| Spring Framework/Hibernate | 1 | 2¹ | 2 |
| Python | 2 | 2² | 4 |
| Django Framework | 3 | 2³ | 8 |
| Core Java | 4 | 2⁴ | 16 |
ব্যবহারিক অ্যাপ্লিকেশন
সেট মেম্বারশিপ চেক (বিটওয়াইজ AND)
-- 'Python' 있는지 চেক (পজিশন ২ = 2^2 = 4)
SELECT * FROM set_zero_demo WHERE technical_skills & 4;
সেট মান ইন্টিজার হিসেবে স্টোর/কম্পেয়ার
-- ইন্টিজার ১৯ = 1+2+16 = C, Spring, Core Java
INSERT INTO set_zero_demo (technical_skills) VALUES (19);
দ্রষ্টব্য
SETটাইপ সর্বোচ্চ ৬৪ সদস্য ধারণ করতে পারে (BIGINT বিটম্যাস্ক)+0নümerিক কনটেক্সটে টাইপ কাস্টিং বাধ্য করে- স্টোরেজ: ১-৮ সদস্য = ১ বাইট, ৯-১৬ = ২ বাইট, ..., ৫৭-৬৪ = ৮ বাইট