মাইএসকিউএল-তে বুলিয়ান মানগুলির জন্য বুলিয়ান বনাম টিনিনেন্ট (1)


124

বুলিয়ান মানগুলির জন্য মাইএসকিউএল ডাটাবেসে কোন কলামের প্রকারটি সবচেয়ে ভাল? আমি ব্যবহার করি booleanতবে আমার সহকর্মী ব্যবহার করে tinyint(1)


3
দেখে মনে হয় যে মাইএসকিউএল স্বচ্ছভাবে booleanহিসাবে আচরণ করে tinyint(1)। আপনি ব্যবহার করতে পারেন তাই boolean, trueএবং falseএবং মাইএসকিউএল একইরূপে তাদের tinyint(1), 1এবং 0
ADTC

ওয়াই অ্যান্ড এন এর সাথে আর একটি ক্ষেত্রে চর 1, যা কিছু লোকের দ্বারা দ্রুত হওয়ার কথা।
Zon

উত্তর:


153

এই ডেটা ধরণের প্রতিশব্দ।


6
আমি ডেটা ধরণের প্রতিশব্দ হিসাবে বলব না - টিনিন্যান্ট (1) বুলের সমান, তবে টিনিনেন্ট এবং বুল এক নয়। মাইনর পয়েন্ট, তবে আপনার উত্তরটি প্রথমবার পড়ার পরে আমাকে ছড়িয়ে দিয়েছে
কাইল চদা

2
এটি প্রশ্নের উত্তর দেয় না। যদিও এটি সত্য যে টিনিন্যান্ট (1) কার্যত বুলের সাথে সমান, তবে ওপি জিজ্ঞাসা করল কোনটি ব্যবহার করা ভাল। @ ডিজে_সেগফল্টের উত্তরটি বুলিয়ান মান সংরক্ষণের সময় কেন টিনিন্টের (1) চেয়ে বেশি পছন্দ করা উচিত তা বোঝানো একটি সঠিক কাজ করে।
কাইল মরগ্যান

87

আমি এখানে অন্যরকম পন্থা অবলম্বন করতে যাচ্ছি এবং পরামর্শ দিচ্ছি যে আপনার সহকর্মী বিকাশকারীদের পক্ষে আপনার কোডটি বোঝা ঠিক ততটাই জরুরি কারণ এটি সংকলক / ডাটাবেসের ক্ষেত্রে। বুলিয়ান ব্যবহার করা টিনিন্যান্ট ব্যবহারের মতো একই কাজ করতে পারে তবে এটি আপনার উদ্দেশ্য কী তা শব্দার্থকভাবে জানানোর সুবিধা রয়েছে এবং এটি মূল্যবান।

আপনি যদি টিনিনেন্ট ব্যবহার করেন তবে এটি স্পষ্ট নয় যে আপনার কেবলমাত্র মানগুলি 0 এবং 1 দেখতে হবে। একটি বুলিয়ান সর্বদা সত্য বা মিথ্যা।


35

booleanমাইএসকিউএলে কোনও আলাদা ডেটাটাইপ নয়; এটি কেবল একটি প্রতিশব্দ tinyintএই পৃষ্ঠাটি মাইএসকিউএল ম্যানুয়ালটিতে দেখুন

ব্যক্তিগতভাবে আমি অগ্রাধিকার হিসাবে টিনিনেন্ট ব্যবহার করার পরামর্শ দেব, কারণ বুলেয়ান আপনার নাম থেকে যা মনে করে তা তা করে না, সুতরাং এটি সম্ভাব্য বিভ্রান্তিকর কোড তৈরি করে। তবে ব্যবহারিক স্তরে, এটি সত্যিই কিছু যায় আসে না - তারা উভয়ই একই কাজ করে, তাই আপনি কোনওটি ব্যবহার করে কোনও লাভ বা হারাচ্ছেন না।


8

এটি সহজ এবং দ্রুততম এনাম ব্যবহার করুন

আমি এনাম বা টিনিনেন্ট (1) এর প্রস্তাব দেব না যেমন বিট (1) এর বুলিয়ান মান সংরক্ষণের জন্য কেবল 1 বিট প্রয়োজন হয় যখন টিনিনেন্ট (1) এর জন্য 8 বিট লাগে needs

সুত্র

মাইএসকিউএল-এ বুলিয়ান মানগুলির জন্য TINYINT বনাম ENUM (0, 1)


আমরা এনাম ব্যবহার করতে পারি না কারণ আমাদের ডাটাবেসেও স্ক্লাইট ব্যবহার করা দরকার
tom

11
আপনি যদি InnoDB ব্যবহার করে থাকেন তবে টিনিনেন্টের মতো কেবল স্থান ব্যবহার করে বিট শেষ হবে। থেকে হাই পারফরমেন্স মাইএসকিউএল (percona বলছি) "InnoDB দোকান ক্ষুদ্রতম পূর্ণসংখ্যা টাইপ বৃহৎ যথেষ্ট প্রতিটি [বিট] কলাম বিট রয়েছে বলে, তাই যদি আপনি কোন স্টোরেজ স্পেস সংরক্ষণ করবেন না [গুলি]।" আপনি যদি কোনও বিআইটি (মোরথান 1) কলামে একাধিক বুলিয়ান মান সংরক্ষণ করেন তবে একমাত্র লাভ gain সুতরাং আপনার যদি কেবল একটি বুলিয়ান ক্ষেত্র থাকে তবে টিনিনেন্ট ব্যবহার করা ইনোডিবিতে বিটের সমান, এবং ছোট্ট কাজটি সাধারণত সহজ কাজ করার কারণে এটি পছন্দনীয়।
বিলমালার্কি

মাইএসকিউএলের জন্য সত্য নয়: BIT(M) - approximately (M+7)/8 bytesদেখুন: dev.mysql.com/doc/refman/8.0/en/stores-requirements.html
জেনস

6

যদিও এটা এটা সত্য boolএবং tinyint(1)হয় বৈশিষ্ট্যগুলি অভিন্ন, boolপছন্দের কারণ এটি আপনাকে যা করতে চেষ্টা করছেন কি শব্দার্থিক অর্থ বহন করে হওয়া উচিত। এছাড়াও, অনেকগুলি ওআরএম boolআপনার প্রোগ্রামিং ভাষার স্থানীয় বুলিয়ান ধরণে রূপান্তর করবে ।


0

আমার অভিজ্ঞতা যখন ব্যবহার ড্যাপার সাথে সংযোগ স্থাপনের জন্য মাইএসকিউএল যে এটা কোন ব্যাপার । আমি নিম্নলিখিত স্ক্রিপ্টটি ব্যবহার করে একটি নন-বিহীন বিট (1) কে নালার টিনিনেন্ট (1) এ পরিবর্তন করেছি:

ALTER TABLE TableName MODIFY Setting BOOLEAN null;

তারপরে ড্যাপার ব্যতিক্রম ছোঁড়া শুরু করলেন। আমি স্ক্রিপ্টের আগে এবং পরে পার্থক্যটি দেখার চেষ্টা করেছি। এবং লক্ষ্য (বিট) (1) tinyint (1) এ পরিবর্তিত হয়েছে।

আমি তখন দৌড়েছি:

ALTER TABLE TableName CHANGE COLUMN Setting Setting BIT(1) NULL DEFAULT NULL;

যা সমস্যার সমাধান করেছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.