জ্যাঙ্গো চারফিল্ড বনাম টেক্সটফিল্ড


302

জ্যাঙ্গোর মধ্যে CharField()এবং পার্থক্য কী TextField()? ডকুমেন্টেশন বলছেন যে CharField()ছোট স্ট্রিং জন্য ব্যবহার করা উচিত এবং TextField()বৃহত্তর স্ট্রিং জন্য ব্যবহার করা উচিত। ঠিক আছে, তবে "ছোট" এবং "বড়" এর মধ্যে রেখাটি কোথায় আঁকা? এখানে ফণা অধীনে কি চলছে যে এই কেস তৈরি করে?

উত্তর:


354

এটি আরডিবিএমএসের varchar(বা অনুরূপ) এর মধ্যে পার্থক্য - এগুলি সাধারণত সর্বাধিক দৈর্ঘ্যের সাথে নির্দিষ্ট করা হয় এবং পারফরম্যান্স বা স্টোরেজ - এবং text(বা অনুরূপ) ধরণের ক্ষেত্রে এটি আরও দক্ষ হতে পারে - এগুলি সাধারণত কেবল হার্ডকডযুক্ত বাস্তবায়ন সীমা দ্বারা সীমাবদ্ধ থাকে (একটি নয়) ডিবি স্কিমা)।

পোস্টগ্রেএসকিউএল 9, বিশেষত উল্লেখ করেছে যে "এই তিন ধরণের মধ্যে পারফরম্যান্সের কোনও পার্থক্য নেই" , তবে আফাইক যেমন মাইএসকিউএল কিছু পার্থক্য রয়েছে, তাই এটি মনে রাখা উচিত।

থাম্বের একটি ভাল নিয়ম হ'ল আপনি CharFieldযখন সর্বাধিক দৈর্ঘ্য সীমাবদ্ধ করার প্রয়োজন হয় আপনি তা ব্যবহার করেন TextField

এটিও আসলে জ্যাঙ্গো-নির্দিষ্ট নয়।


42
এবং বিপরীতভাবে, আপনি যদি চারফিল্ড ব্যবহার করেন তবে আপনার অবশ্যই সর্বোচ্চ দৈর্ঘ্য থাকতে হবে
স্যাম সোভেনবজোরগক্রিসটেনসেনসেন

17
আমি খুঁজে পেয়েছি যে TextFieldডিফল্টরূপে ব্যবহার করা আপনার অ্যাপের বহনযোগ্যতার উপর প্রভাব ফেলতে পারে। পোস্টগ্র্রেসে কোনও পারফরম্যান্স হিট নাও হতে পারে, তবে ওরাকল এটিকে CLOBকিছু বিরক্তিকর হিসাবে সংরক্ষণ করবে যেমন WHERE বিবৃতিতে ক্ষেত্রটি ব্যবহার করতে সক্ষম না হওয়া। কিছু বিবেচনা করার জন্য।
রব

3
এটিকেও বিবেচনা করা উচিত যে ওরাকলে 2000 এর বেশি হতে CharFieldপারে না max_lengthবা এটি একটি ORA-00910: specified length too long for its datatypeত্রুটি জারি করে।
দিনাই

ক্ষেত্রের বৈশিষ্ট্যগুলি বিবেচনা করার সময়, পোস্টগ্র্রেস ডক্সগুলিও (জোর দেওয়া খনি) বলার জন্য দরকারী, উল্লেখযোগ্য : "সর্বাধিক দীর্ঘতম সম্ভাব্য অক্ষরের স্ট্রিংটি প্রায় 1 গিগাবাইট ((ডাটা টাইপের ঘোষণায় এন এর জন্য অনুমোদিত সর্বোচ্চ মানটি হ'ল) এর চেয়ে কম [...] আপনি যদি কোনও নির্দিষ্ট উপরের সীমা না দিয়ে লম্বা স্ট্রিংগুলি সঞ্চয় করতে চান তবে একটি স্বেচ্ছাসেবী দৈর্ঘ্য সীমা না বাড়িয়ে দৈর্ঘ্য নির্দিষ্টকারী ছাড়াই ভিন্ন পাঠ্য বা চরিত্রটি ব্যবহার করুন )) "
iff_or

3
আমি বিশ্বাস করি জ্যাঙ্গোর মধ্যে দুজনের মধ্যে সত্যই গুরুত্বপূর্ণ পার্থক্যটি হল কোনও দৃশ্য ক্ষেত্রটি কীভাবে পরিচালনা করবে। জেনেরিক এডিট ভিউতে টেক্সটফিল্ড একটি মাল্টি-লাইন রি-সাইজযোগ্য ইনপুট হিসাবে রেন্ডার করবে; যদিও চারফিল্ডটি একটি একক লাইন ইনপুট। আমি টেক্সটফিল্ডের জন্য জ্যাঙ্গো উত্সটির দিকে নজর দিইনি, তবে আমি ধরে নিতে চলেছি যে কোনও উত্পন্ন এইচটিএমএল একটি টেক্সটফিল্ডের সাথে সংযুক্ত থাকে, তবে সম্ভবত এটি মাল্টলাইন পাঠ্যটি সঠিকভাবে ম্যানিপুলেট করার কোনও উপায় বাস্তবায়ন করবে।
মিচেল ওয়ালগুলি

36

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

এমনকি এটি গুরুত্বপূর্ণ না হলেও, আপনি যদি মডেলফর্মগুলি ব্যবহার করেন তবে আপনি ফর্মটিতে একটি ভিন্ন ধরণের সম্পাদনা ক্ষেত্র পাবেন। মডেলফর্ম একটি এইচটিএমএল আকারে একটি চার্ফিল্ডের জন্য এক লাইনের পাঠ্যের আকার এবং টেক্সটফিল্ডের জন্য একাধিক লাইন তৈরি করবে।


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

8

যেমন।,। নীচের মতো একটি মডেলটিতে 2 টি ক্ষেত্র যুক্ত করা হয়েছে ..

description = models.TextField(blank=True, null=True)
title = models.CharField(max_length=64, blank=True, null=True)

মাইগ্রেশন প্রয়োগ করা হয় নিচে মাইএসকিএল অনুসন্ধানগুলি কার্যকর করা হয়।


জন্য TextField(বিবরণ) ক্ষেত্রের একটি হিসাবে সংজ্ঞায়িত করা হয়longtext

ALTER TABLE `sometable_sometable` ADD COLUMN `description` longtext NULL;

স্ট্রিং-টাইপ-ওভারভিউTextField অনুযায়ী মাইএসকিউএলের সর্বোচ্চ দৈর্ঘ্য 4 জিবি ।


জন্য CharField(শিরোনাম) MAX_LENGTH (প্রয়োজন) হিসাবে সংজ্ঞায়িত করা হয়varchar(64)

ALTER TABLE `sometable_sometable` ADD COLUMN `title` varchar(64) NULL;
ALTER TABLE `sometable_sometable` ALTER COLUMN `title` DROP DEFAULT;

1
নীট : জ্যাঙ্গো ডক্স সুপারিশ করে Avoid using null on string-based fields such as CharField and TextField:: docs.djangoproject.com/en/2.0/ref/models/fields/#null তাই রাখা ভাল null=False
modulitos

7

CharField255অক্ষরের সর্বাধিক দৈর্ঘ্য রয়েছে যখন অক্ষরের TextFieldচেয়ে বেশি রাখতে পারে 255TextFieldযখন আপনার কাছে ইনপুট হিসাবে বড় স্ট্রিং থাকে তখন ব্যবহার করুন। এটি জেনে রাখা ভাল যে যখন max_lengthপ্যারামিটারটি কোনওটিতে প্রবেশ করা TextFieldহয় তখন এটি TextAreaউইজেটের সাথে দৈর্ঘ্যের বৈধতাটি পাস করে ।


" VARCHARকলামের প্রকারের সাথে সঞ্চিত কোনও ক্ষেত্রের ক্ষেত্রে max_length256 টি অক্ষর সীমাবদ্ধ থাকবে যদি আপনি ক্ষেত্রের জন্য অনন্য = সত্য ব্যবহার করেন " "(আমার জোর
emphasis

-4

আমি একজন অদ্ভুত সমস্যা এবং অপ্রীতিকর অদ্ভুত পার্থক্য বোঝা যখন আমি একটি ব্যবহারকারীর কাছ থেকে একটি URL টি পেতে CharField এবং তারপর এবং HTML এটা সূরা দ্বারা একটি ট্যাগ ব্যবহার, এটা যোগ করা আমার URL- এ যা URL এবং যে না আমি কি চাই। তবে আমি যখন এটি টেক্সটফিল্ডের মাধ্যমে করি এটি ব্যবহারকারীদের প্রবেশ করা কেবলমাত্র URL টি পাস করে। এগুলি দেখুন: আমার ওয়েবসাইট ঠিকানা:http://myweb.com

চারফিল্ড প্রবেশ: http://some-address.com

এটি ক্লিক করার সময়: http://myweb.comhttp://some-address.com

পাঠ্যফিল্ড প্রবেশ: http://some-address.com

এটি ক্লিক করার সময়: http://some-address.com

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


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