MySQL: বড় VARCHAR বনাম টেক্সট?




text messages (4)

আমি MySQL এ একটি বার্তা টেবিল পেয়েছি যা ব্যবহারকারীদের মধ্যে বার্তা রেকর্ড করে। সাধারণ আইড এবং বার্তা প্রকারের (সমস্ত পূর্ণসংখ্যা) প্রকারের পাশাপাশি আমি প্রকৃত বার্তা পাঠ্য VARCHAR বা TEXT হিসাবে সংরক্ষণ করতে হবে। আমি 3000 অক্ষরগুলির একটি সামনের সীমা নির্ধারণ করছি যার মানে বার্তাগুলিকে আর ডিবিতে আর কখনও সন্নিবেশ করা হবে না।

VARCHAR (3000) বা টেক্সট সঙ্গে যেতে জন্য একটি যুক্তিসঙ্গত আছে? VARCHAR (3000) লিখতে কিছু আছে যা কিছুটা পাল্টা-স্বজ্ঞাত মনে করে। আমি স্ট্যাক ওভারফ্লোে অন্যান্য অনুরূপ পোস্টগুলির মধ্য দিয়ে গিয়েছি কিন্তু এই ধরনের সাধারণ বার্তা সংরক্ষণের জন্য নির্দিষ্ট মতামত পেতে ভাল হবে।


Disclaimer: আমি একটি মাইএসকিউএল বিশেষজ্ঞ না ... কিন্তু এই বিষয় আমার বোঝার।

আমার মনে হয় টেক্সটটি MySQL সারির বাইরে সংরক্ষিত আছে, যখন আমি মনে করি VARCHAR সারির অংশ হিসাবে সংরক্ষণ করা হয়। MySQL সারিগুলির জন্য সর্বাধিক সারি দৈর্ঘ্য রয়েছে। সুতরাং আপনি VARCHAR ব্যবহার করে সারিতে কতগুলি ডেটা সঞ্চয় করতে পারেন তা সীমাবদ্ধ করতে পারেন।

এছাড়াও সারি অংশে ভিএইচএআরএর কারণে, আমি সন্দেহ করি যে সেই ক্ষেত্রটি দেখছে এমন প্রশ্নগুলি পাঠ্য সংখ্যার ব্যবহার করে তুলনায় কিছুটা দ্রুততর হবে।


আপনি ব্যবহারকারীর ইনপুট কতক্ষণ ধরে ভবিষ্যদ্বাণী করতে পারেন?

VARCHAR (এক্স)

কেস: ব্যবহারকারীর নাম, ইমেইল, দেশ, বিষয়, পাসওয়ার্ড

টেক্সট

কেস: বার্তা, ইমেল, মন্তব্য, বিন্যাসিত টেক্সট, এইচটিএমএল, কোড, ছবি, লিঙ্ক

MEDIUMTEXT

কেস: বড় জসন সংস্থা, সংক্ষিপ্ত থেকে মাঝারি দৈর্ঘ্যের বই, সিএসভি স্ট্রিং

LONGTEXT

কেস: পাঠ্যপুস্তক, প্রোগ্রাম, লগ ফাইলের বছর, হ্যারি পটার এবং আগুনের গবলেট, বৈজ্ঞানিক গবেষণা লগিং


শুধু সর্বোত্তম অনুশীলন ব্যাখ্যা করা:

  1. টেক্সট বিন্যাস বার্তা প্রায় সবসময় টেক্সট হিসাবে সংরক্ষণ করা উচিত (তারা ইচ্ছাকৃতভাবে দীর্ঘ হতে শেষ)

  2. স্ট্রিং বৈশিষ্ট্যাবলী VARCHAR (গন্তব্য ব্যবহারকারী নাম, বিষয়, ইত্যাদি ...) হিসাবে সংরক্ষণ করা উচিত।

আমি বুঝতে পারি যে আপনি একটি সামনের সীমা সীমা পেয়েছেন, যা না হওয়া পর্যন্ত এটি দুর্দান্ত। * গ্রিন * কৌশলটি ডিবিটিকে তার সাথে যুক্ত অ্যাপ্লিকেশনের থেকে পৃথক বলে মনে করা। কেবলমাত্র একটি অ্যাপ্লিকেশন ডেটাতে সীমা রাখে, এর অর্থ এই নয় যে তথ্য অন্তর্নিহিতভাবে সীমিত।

এই বার্তাগুলি সম্পর্কে কী বলা যায় যা তাদের 3000 অক্ষরের বেশি হতে পারে না? এটি কেবল একটি নির্বিচারে অ্যাপ্লিকেশন সীমাবদ্ধতা (একটি টেক্সট বক্স বা কিছু করার জন্য) বলুন, ডাটা লেয়ারের একটি TEXT ক্ষেত্রটি ব্যবহার করুন।


সংক্ষিপ্ত উত্তর: কোন বাস্তব, কর্মক্ষমতা, বা স্টোরেজ, পার্থক্য।

দীর্ঘ উত্তর:

VARCHAR(3000) (অথবা অন্য কোন বড় সীমা) এবং VARCHAR(3000) মধ্যে অবশ্যই কোন পার্থক্য নেই (MySQL এ)। সাবেক 3000 অক্ষরে ছিন্নভিন্ন হবে; পরের 65535 বাইট এ ছিন্নভিন্ন হবে। (আমি বাইট এবং অক্ষরগুলির মধ্যে একটি পার্থক্য তৈরি করি কারণ একটি চরিত্র একাধিক বাইট নিতে পারে।)

VARCHAR ছোট সীমাগুলির জন্য, VARCHAR কিছু সুবিধা রয়েছে।

  • "ছোট" মানে 191, 255, 512, 767, অথবা 3072, ইত্যাদি সংস্করণ, প্রসঙ্গ এবং CHARACTER SET উপর নির্ভর করে।
  • INDEXes একটি কলাম সূচী করা যাবে কত বড় সীমাবদ্ধ। (767 বা 3072 বাইট ; এটি সংস্করণ এবং সেটিংস নির্ভরশীল)
  • জটিল SELECTs দ্বারা তৈরি মধ্যবর্তী টেবিল দুটি ভিন্ন উপায়ে পরিচালিত হয় - স্মৃতি (দ্রুত) বা MyISAM (ধীর)। যখন 'বড়' কলামগুলি জড়িত থাকে, ধীর কৌশলটি স্বয়ংক্রিয়ভাবে বাছাই করা হয়। (উল্লেখযোগ্য পরিবর্তনগুলি 8.0 সংস্করণে আসছে; তাই এই বুলেট আইটেমটি পরিবর্তন সাপেক্ষে।)
  • পূর্ববর্তী আইটেমের সাথে সম্পর্কিত, সমস্ত TEXT ডেটাপাইপ ( VARCHAR বিপরীতে) সরাসরি মাইআইএসএমে যান। অর্থাৎ, TINYTEXT স্বয়ংক্রিয়ভাবে VARCHAR সমতুল্য টেম্প টেবিলগুলির জন্য স্বয়ংক্রিয়ভাবে খারাপ। (কিন্তু এই তৃতীয় আলোচনার আলোচনা!)
  • VARBINARY VARCHAR মত হয়; BLOB TEXT মত।

অন্যান্য উত্তর Rebuttal

আসল প্রশ্নটি এক জিনিস জিজ্ঞেস করেছিল (যা ডাটাটাইপ ব্যবহার করতে হবে); গ্রহণযোগ্য উত্তর অন্য কিছু (অফ রেকর্ড স্টোরেজ) উত্তর। যে উত্তর এখন অতিক্রান্ত হয়।

যখন এই থ্রেডটি শুরু হয়েছিল এবং উত্তর দেওয়া হয়েছিল, InnoDB এ কেবল দুটি "সারি ফর্ম্যাট" ছিল। এর পরপরই আরও দুটি ফরম্যাট ( DYNAMIC এবং COMPRESSES ) চালু করা হয়।

VARCHAR() এবং VARCHAR() এর স্টোরেজ অবস্থানটি আকারের উপর ভিত্তি করে, ডেটাটাইপের নামে নয়। বড় টেক্সট / ব্লব কলামগুলির অন / অফ-রেকর্ড স্টোরেজ সম্পর্কিত একটি আপডেটের আলোচনার জন্য এটি দেখুন।





varchar