উত্তর:
পার্থক্য নির্ভর করে যে কীভাবে প্রতীকটিকে কোয়েরি ভাষায় স্ব স্ব কলামের ধরণে রূপান্তর করা হয়।
মাইএসকিউএল সহ: স্ট্রিংটি ভ্রচার (255) - এ ম্যাপ করা হয়েছে - http://guides.rubyonrails.org/migrations.html
:string | VARCHAR | :limit => 1 to 255 (default = 255)
:text | TINYTEXT, TEXT, MEDIUMTEXT, or LONGTEXT2 | :limit => 1 to 4294967296 (default = 65536)
রেফারেন্স:
প্রত্যেকটি কখন ব্যবহার করা উচিত?
থাম্বের একটি সাধারণ নিয়ম হিসাবে, :string
সংক্ষিপ্ত পাঠ্য ইনপুট (ব্যবহারকারীর নাম, ইমেল, পাসওয়ার্ড, শিরোনাম, ইত্যাদি) ব্যবহার :text
করুন এবং বর্ণন, মন্তব্য সামগ্রী ইত্যাদির মতো দীর্ঘ প্রত্যাশিত ইনপুটটির জন্য ব্যবহার করুন
true
একটি varchar করার জন্য (অতএব, string
টাইপ ক্ষেত্র) মাইএসকিউএল মধ্যে মান সিরিয়েলাইজ 1
(যা সম্পূর্ণরূপে ন্যায্য)। যাইহোক, text
প্রকারভেদে, "সত্য" মানটি সংরক্ষণ করে এটি এককালের চর হিসাবে সিরিয়ালে পরিণত হয় t
। আমি এটি এবং ভবিষ্যতের সমস্ত সারি উপলব্ধি না করে একটি কলাম স্থানান্তরিত করেছি যেখানে মানটি এখন সত্য t
। কারও কি এই আচরণের কোনও অন্তর্দৃষ্টি আছে?
আপনি যদি পোস্টগ্রাগেস ব্যবহার করেন তবে যেখানেই আপনি পাঠ্য ব্যবহার করতে পারেন, যদি না আপনার আকারের সীমাবদ্ধতা না থাকে যেহেতু পাঠ্য বনাম ভারচারের জন্য কোনও কার্যকারিতা জরিমানা নেই
ফাঁকা-প্যাডযুক্ত প্রকারটি ব্যবহার করার সময় বাড়ানো স্টোরেজ স্পেস এবং দৈর্ঘ্য-সীমাবদ্ধ কলামে স্টোর করার সময় দৈর্ঘ্য পরীক্ষা করার জন্য কয়েকটি অতিরিক্ত সিপিইউ চক্র ছাড়াও এই তিন ধরণের মধ্যে পারফরম্যান্সের পার্থক্য নেই। চরিত্রের (এন) কিছু অন্যান্য ডাটাবেস সিস্টেমে পারফরম্যান্স সুবিধা থাকলেও পোস্টগ্রিসএসকিউএলে তেমন কোনও সুবিধা নেই; প্রকৃতপক্ষে অক্ষর (এন) অতিরিক্ত স্টোরেজ ব্যয়ের কারণে সাধারণত তিনটির মধ্যে সবচেয়ে ধীর হয়। বেশিরভাগ পরিস্থিতিতে পরিবর্তে পাঠ্য বা চরিত্র পরিবর্তিত হওয়া উচিত
text
ওভার (n)
ডেটা ধরণের ব্যবহারের জন্য সেই ব্লগ পোস্টে যুক্তিগুলি বিশ্বাসযোগ্য, তবে text
ওভার ব্যবহারের পক্ষে যুক্তিটি varchar
নয়। তিনি বলেছেন যে তারা একই তবে পছন্দ হয় text
কারণ এতে varchar
বিভ্রান্ত হতে পারে varchar(n)
এবং text
টাইপ করার জন্য অক্ষর কম। তবে text
পরিবর্তে ব্যবহার করে varchar
, আপনি যে প্রসঙ্গটি সংরক্ষণ করেন তা হারাবেন যে সঞ্চিত ডেটা দীর্ঘ হওয়া উচিত নয়। উদাহরণস্বরূপ, ব্যবহারকারীর নাম সংরক্ষণ text
করা আমার কাছে বিভ্রান্তিকর বলে মনে হচ্ছে।
স্ট্রিং আপনার ডাটাবেসে "বর্ণের" অনুবাদ করে, যখন পাঠ্যটি "পাঠ্যে" অনুবাদ করে। একটি বার্চারে অনেক কম আইটেম থাকতে পারে, একটি পাঠ্য যেকোন দৈর্ঘ্যের (প্রায়) হতে পারে।
ভাল রেফারেন্স চেক সহ গভীরতর বিশ্লেষণের জন্য http://www.pythian.com/news/7129/text-vs-varchar/ দেখুন
সম্পাদনা করুন: কিছু ডাটাবেস ইঞ্জিন একবারে লোড varchar
করতে পারে তবে টেবিলের বাইরে পাঠ্য (এবং ব্লব) সঞ্চয় করে। একজন SELECT name, amount FROM products
, অনেক ধীর যখন ব্যবহার হতে পারে text
জন্য name
চেয়ে যখন আপনি ব্যবহার varchar
। এবং এরপরে, ডিফল্টরূপে SELECT * FROM...
আপনার পাঠ্য-কলামগুলির সাথে রেকর্ডগুলি লোড হবে। এটি সম্ভবত আপনার বা আমার অ্যাপ্লিকেশনটিতে কখনই আসল সমস্যা হবে না, যদিও (অকাল অপটিমাইজেশন ...)। তবে পাঠ্যটি সর্বদা "ফ্রি" হয় না তা জেনে রাখা ভাল।
স্ট্রিং যদি আকারটি স্থির হয় এবং ছোট হয় এবং পাঠ্য যদি এটি পরিবর্তনশীল এবং বড় হয়। এটি এক ধরণের গুরুত্বপূর্ণ কারণ পাঠ্যটি স্ট্রিংয়ের চেয়ে অনেক বড়। এতে আরও অনেক কিলোবাইট রয়েছে।
সুতরাং ছোট ক্ষেত্রগুলির জন্য সর্বদা স্ট্রিং (বার্চর) ব্যবহার করুন। ক্ষেত্র পছন্দ। প্রথম নাম, লগইন, ইমেল, বিষয় (কোনও নিবন্ধ বা পোস্টের) এবং পাঠ্যগুলির উদাহরণ: লিখিত সামগ্রী বা কোনও পোস্ট বা নিবন্ধ। অনুচ্ছেদ ইত্যাদি জন্য ক্ষেত্র
স্ট্রিং আকার 1 থেকে 255 (ডিফল্ট = 255)
পাঠ্য আকার 1 থেকে 4294967296 (ডিফল্ট = 65536) 2
নাম, ঠিকানা, ফোন, সংস্থার মতো সংক্ষিপ্ত ক্ষেত্রের জন্য স্ট্রিং ব্যবহার করুন
বৃহত্তর সামগ্রী, মন্তব্য, সামগ্রী, অনুচ্ছেদের জন্য পাঠ্য ব্যবহার করুন Use
আমার সাধারণ নিয়ম, যদি এটি এক লাইনের বেশি কিছু হয় তবে আমি সাধারণত পাঠ্যের জন্য যাই, যদি এটি 2-6 টি সংক্ষিপ্ত শব্দ হয় তবে আমি স্ট্রিংয়ের জন্য যাই।
সরকারী নিয়ম একটি স্ট্রিংয়ের জন্য 255। সুতরাং, যদি আপনার স্ট্রিং 255 টিরও বেশি অক্ষরের হয় তবে পাঠ্যের জন্য যান।
যদি আপনি ওরাকল ব্যবহার করেন ... কলাম এবং একটি হিসাবে STRING
তৈরি করা হবে ।VARCHAR(255)
TEXT
CLOB
NATIVE_DATABASE_TYPES = {
primary_key: "NUMBER(38) NOT NULL PRIMARY KEY",
string: { name: "VARCHAR2", limit: 255 },
text: { name: "CLOB" },
ntext: { name: "NCLOB" },
integer: { name: "NUMBER", limit: 38 },
float: { name: "BINARY_FLOAT" },
decimal: { name: "DECIMAL" },
datetime: { name: "TIMESTAMP" },
timestamp: { name: "TIMESTAMP" },
timestamptz: { name: "TIMESTAMP WITH TIME ZONE" },
timestampltz: { name: "TIMESTAMP WITH LOCAL TIME ZONE" },
time: { name: "TIMESTAMP" },
date: { name: "DATE" },
binary: { name: "BLOB" },
boolean: { name: "NUMBER", limit: 1 },
raw: { name: "RAW", limit: 2000 },
bigint: { name: "NUMBER", limit: 19 }
}
গৃহীত উত্তরটি দুর্দান্ত is আমার জন্য এটি পুরোপুরি করেনি।
সর্বাধিক আকার : সীমা => 1 থেকে 4294967296 ঠিক তেমন কাজ করেনি, সেই সর্বোচ্চ আকার থেকে আমাকে -1 যেতে হবে। আমি বড় JSON ব্লব সংরক্ষণ করছি এবং তারা কখনও কখনও বিশাল হতে পারে।
মাইএসকিউএল যে মানটির বিষয়ে অভিযোগ করে না তার সাথে বৃহত্তর মান সহ আমার স্থানান্তর এখানে।
উল্লেখ্য 5 সীমা শেষে পরিবর্তে 6
class ChangeUserSyncRecordDetailsToText < ActiveRecord::Migration[5.1]
def up
change_column :user_sync_records, :details, :text, :limit => 4294967295
end
def down
change_column :user_sync_records, :details, :string, :limit => 1000
end
end
অ্যাট্রিবিউট মিলে হয়, তাহলে f.text_field
ফর্ম ব্যবহারে স্ট্রিং , এটা মিলে হলে f.text_area
ব্যবহার টেক্সট ।
:text
। Depesz.com/2010/03/02/charx-vs-varcharx-vs-varchar-vs-text