mysql - বুলিয়ান মান সংরক্ষণের জন্য কোন মাইএসকিউএল ডাটা টাইপ ব্যবহার করতে হবে




boolean sqldatatypes (8)

যেহেতু মাইএসকিউএলটিতে কোনও 'বুলিয়ান' ডাটা টাইপ নেই বলে মনে হয়, মাইএসকিউএলটিতে সত্য / মিথ্যা তথ্য সংরক্ষণের জন্য কোন ডেটা টাইপ আপনি 'অপব্যবহার' করেন?

বিশেষ করে লেখার প্রেক্ষাপটে এবং একটি পিএইচপি স্ক্রিপ্ট থেকে পড়া।

সময়ের সাথে সাথে আমি বিভিন্ন পদ্ধতি ব্যবহার করেছি এবং দেখেছি:

  • tinyint, varchar ক্ষেত্র মান ধারণকারী 0/1,
  • '0' / '1' বা 'সত্য' / 'মিথ্যা' স্ট্রিং ধারণকারী ভার্চার ক্ষেত্র
  • এবং অবশেষে enum ক্ষেত্র দুটি বিকল্প 'সত্য' / 'মিথ্যা' ধারণকারী।

উপরে কেউ অনুকূল মনে হয়। আমি tinyint 0/1 ভেরিয়েন্ট পছন্দ করতে ঝোঁক, পিএইচপি মধ্যে স্বয়ংক্রিয় টাইপ রূপান্তর আমাকে বরং বুলিয়ান মান দেয়।

সুতরাং আপনি কোন ডাটা টাইপ ব্যবহার করেন? বুলিয়ান মানগুলির জন্য ডিজাইন করা কোন ধরনের কি আমি উপেক্ষা করেছি? আপনি একটি টাইপ বা অন্য ব্যবহার করে কোন সুবিধা / অসুবিধা দেখতে?


আপনি যদি বোলেইন টাইপটি ব্যবহার করেন তবে এটি টিআইএনআইএনটিটি (1) এর সাথে আলাইজড। আপনি মানসম্মত এসকিউএলটি ব্যবহার করতে চান এবং এটি মনে রাখবেন না যে ক্ষেত্রটি পরিসীমা মূল্যের বাইরে থাকতে পারে (মূলত যেটি 0 নয় তা 'সত্য' হবে)।

ENUM ('মিথ্যা', 'সত্য') আপনাকে আপনার এসকিউএল-এ স্ট্রিংগুলি ব্যবহার করতে দেবে এবং মাইএসকিউএল অভ্যন্তরীণভাবে একটি পূর্ণসংখ্যা হিসাবে ক্ষেত্রটি সংরক্ষণ করবে যেখানে 'মিথ্যা' = 0 এবং 'সত্য' = 1 এনাম নির্দিষ্ট করার নির্দেশের ভিত্তিতে ।

মাইএসকিউএল 5+ এ আপনি একটি বিট (1) ক্ষেত্রটি ব্যবহার করতে পারেন যা 1-বিট সংখ্যাসূচক ধরনের নির্দেশ করতে পারে। আমি বিশ্বাস করি না যে এটি প্রকৃতপক্ষে সঞ্চয়স্থানে কম স্থান ব্যবহার করে কিন্তু আবার আপনাকে সম্ভাব্য মানগুলি 1 বা 0 এ সীমাবদ্ধ করতে দেয়।

উপরের সমস্তগুলি প্রায় একই পরিমাণ সঞ্চয়স্থান ব্যবহার করবে, তাই আপনি যেটিকে সহজে কাজ করার জন্য সবচেয়ে সহজ মনে করেন তা বেছে নেওয়া সেরা।


আমি জিরো, NULLS, এবং 'পিএইচপি, মাইএসকিউএল এবং POST মানগুলির একটি লুপ সঠিকভাবে ঘোরাতে চেষ্টা করে বিরক্ত হয়েছি, তাই আমি শুধু' হ্যাঁ 'এবং' না 'ব্যবহার করি।

এটি নিশ্ছিদ্রভাবে কাজ করে এবং কোনও বিশেষ চিকিত্সা দরকার যা সুস্পষ্ট এবং সহজ নয়।


এই প্রশ্নের উত্তর দেওয়া হয়েছে কিন্তু আমি figured আমি আমার $ 0.02 মধ্যে নিক্ষেপ করা হবে। আমি প্রায়ই একটি CHAR (0) ব্যবহার করি, যেখানে '== সত্য এবং নূন্য == মিথ্যা।

MySQL ডক্স থেকে

CHAR (0) এছাড়াও খুব ভাল যখন আপনার একটি কলাম দরকার যা কেবল দুটি মান নিতে পারে: একটি কলাম যা CHAR (0) হিসাবে সংজ্ঞায়িত করা হয় কেবলমাত্র এক বিট ধারণ করে এবং শুধুমাত্র মানগুলি নুল এবং '' (খালি স্ট্রিং) গ্রহণ করতে পারে। ।


এখানে উত্তর পড়ার পর আমি bit(1) এবং হ্যাঁ ব্যবহার করার সিদ্ধান্ত নিলাম, এটি স্পেস / সময়তে কোনভাবেই ভাল ছিল, কিন্তু কিছুক্ষণ পরে আমি আমার মন পরিবর্তন করেছিলাম এবং আমি কখনই এটি ব্যবহার করব না। প্রস্তুত বিবৃতি, লাইব্রেরি ইত্যাদি (পিএইচপি) ব্যবহার করার সময় এটি আমার উন্নয়নকে অনেক জটিল করেছে।

তখন থেকে, আমি সবসময় tinyint(1) ব্যবহার, যথেষ্ট ভাল মনে হয়।


বিটগুলি যদি প্রচুর বুলিয়ান ক্ষেত্র থাকে তবে বিভিন্ন বাইট বিকল্পগুলি (ছোট্ট, enum, char (1) এর উপর শুধুমাত্র সুবিধাজনক। এক বিট ক্ষেত্র এখনও একটি সম্পূর্ণ বাইট লাগে। দুই বিট ক্ষেত্র একই বাইট মধ্যে মাপসই করা। তিন, চার, পাঁচ, ছয়, সাত, আট। পরে তারা পরবর্তী বাইট পূরণ শুরু। অবশেষে সঞ্চয়গুলি এত ছোট, হাজারো অপটিমাইজেশান আপনি ফোকাস করা উচিত। যতক্ষণ না আপনি একটি বিশাল পরিমাণ তথ্য নিয়ে কাজ করছেন, ততগুলি কয়েকটি বাইট বেশি যোগ করতে যাচ্ছে না। আপনি যদি পিএইচপি দিয়ে বিট ব্যবহার করেন তবে আপনাকে মান এবং আউট মানের টাইপcast করতে হবে।


মাইএসকিউএল 5.0.3 এবং উচ্চতর জন্য, আপনি BIT ব্যবহার করতে পারেন। ম্যানুয়াল বলেছেন:

MySQL 5.0.3 হিসাবে, বিট ডাটা টাইপটি বিট-ক্ষেত্রের মানগুলি সংরক্ষণ করতে ব্যবহৃত হয়। একটি ধরনের বিআইটি (এম) এম-বিট মান স্টোরেজ সক্ষম করে। এম 1 থেকে 64 হতে পারে।

অন্যথায়, মাইএসকিউএল ম্যানুয়াল অনুসারে আপনি tinyint এবং বুলিয়ান ব্যবহার করতে পারেন যা tinyint মুহূর্তে (1):

Bool, Boolean: এই ধরনের tinyint (1) এর জন্য প্রতিশব্দ। শূন্য একটি মান মিথ্যা বলে মনে করা হয়। অ শূন্য মান সত্য বলে মনে করা হয়।

MySQL এছাড়াও বলে যে:

আমরা ভবিষ্যতে MySQL রিলিজে স্ট্যান্ডার্ড এসকিউএল অনুসারে, সম্পূর্ণ বুলিয়ান টাইপ হ্যান্ডলিং বাস্তবায়ন করতে ইচ্ছুক।

রেফারেন্স: dev.mysql.com/doc/refman/5.5/en/numeric-type-overview.html


মাইস্কুলের এই লিঙ্কটি উল্লেখ করে, অ্যাপ্লিকেশন ব্যবহার অনুসারে, যদি কেউ কেবলমাত্র 0 বা 1 টি সঞ্চয় করতে চায় তবে বিট (1) ভাল পছন্দ।


BOOL এবং BOOL TINYINT(1) এর সমার্থক। জিরো false , অন্য কিছু truehere আরো তথ্য।





sqldatatypes