কোনও ডাটাবেসে পাঠ্য কলামগুলির উপরে বারচর ব্যবহার করার কোনও কারণ আছে কি?


36

চারপাশে আসার varcharআগে থেকে কি কেবলমাত্র একটি অবশিষ্টাংশ textএসে গেছে, বা এমন কোনও মামলা রয়েছে যা আপনি ব্যবহার করতে চানvarchar ? (বা charএই বিষয়ে ..)

(আমি প্রতিদিন পোস্টগ্রিস এবং মাইএসকিউএল (মাইআইএসএএম) ব্যবহার করি, তাই আমি সেগুলিতে সবচেয়ে বেশি আগ্রহী তবে অন্যান্য ডাটাবেসের উত্তর অবশ্যই স্বাগত। _-)


6
জন্য কমপক্ষে SQL সার্ভার , textঅসমর্থিত হয়েছে। ব্যবহারের বিবেচনাগুলি রয়েছে যা ডেটা কোথায় সংরক্ষণ করা হয় এবং কীভাবে এটি অ্যাক্সেস পায় তা সম্পর্কিত।
ওডে

কিছু ডিবিএমএস-এ আপনি কোনও পাঠ্য কলামটি বাছাই করতে পারবেন না যেখানে ধারা রয়েছে। আমি পোস্টগ্রিসের সাথে পরিচিত নই তবে আপনার ডকুমেন্টেশন চেক করুন।
jqa

1
এই স্ট্যাকওভারফ্লো প্রশ্নটি আরও কিছু তথ্য সরবরাহ করতে পারে।
J0ANMM

উত্তর:


32

সাধারণভাবে

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

পোস্টগ্রিসে

এই সমস্ত ধরণের একই সি ডেটা কাঠামো ব্যবহার করে অভ্যন্তরীণভাবে সংরক্ষণ করা হয়।

মাইএসকিউএল-এ

textকলাম একটি বিশেষ সংস্করণBLOB এবং ইন্ডেক্স উপর বিধিনিষেধ রয়েছে।

কেবলমাত্র এই দুটি উদাহরণ অন্য এসকিউএল আরডিবিএমএস সিস্টেমে এক্সট্রাপোলেট করা যেতে পারে এবং কখন অন্যটির থেকে এক ধরণের চয়ন করতে হবে তা বোঝার যথেষ্ট কারণ হওয়া উচিত।

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

  • CHARআপনি যখন জানবেন আপনার প্রতিটি প্রবেশের জন্য নির্দিষ্ট সংখ্যক অক্ষর রয়েছে Use
  • আপনার VARCHARপ্রতিটি প্রবেশের জন্য যখন অক্ষরগুলির একটি চলক সংখ্যা থাকে তখন ব্যবহার করুন ।
  • আপনার যদি এনকোডিং বা সমমানের স্ট্যান্ডার্ড টাইপের সাথে সরবরাহ VARCHARকরতে পারে তার চেয়ে বেশি স্টোরেজ প্রয়োজন ।CLOBUTF-8
  • এটি মানহীনTEXT হিসাবে কখনও ব্যবহার করবেন না

1
এর জন্য গৃহীত non standard and implementation specificএবং not indexable, not searchable and not sortableযা আমি বুঝতে পারি নি। আমি ইমপ্রেশনের অধীনে text ছিল মানসম্মত।
ইজকাটা 8'12

1
আপনার কি ASCII textস্ট্যান্ডার্ড বা ইউনিকোড textস্ট্যান্ডার্ড :-) বা অন্য অর্ধ ডজন textএনকোডিং মানগুলির মধ্যে একটি?

1
আপনি যদি এসকিউএল স্ট্যান্ডার্ড ডকুমেন্টগুলি খনন করতে যান তবে আমি মনে করি না আপনি textকোনও চরিত্রের ধরণ হিসাবে কিছু পেয়ে যাবেন । আমি কিছুই দেখিনি, কিছু বিক্রেতারা এটিকে কল করে long charএবং এর মতো করে, এটি মূলত এটির সাথে একটি এনকোডিং যুক্ত একটি বিএলএলবি।

2
@ জারোদরবারসন সত্যি বলতে যে প্রচুর স্বনামধন্য সংস্থান রয়েছে যা "পোস্টগ্রিস পরিবেশে থাকে" যা "সর্বদা ব্যবহার করে TEXT" conc আপনি কি অন্য কিছু ডাটাবেস, কষ্টসহকারে একটি চুক্তি ঊর্মিভঙ্গ যে স্থানান্তর করতে, বিশেষ করে আপনি বিবেচনা করতে postgres 'সীমাহীন যে থাকবে চলুন তাহলে VARCHARসীমাহীন অনুবাদ নাও হতে পারে (টোস্ট কারণে মত আর সারি সীমা আছে মাইএসকিউএল দিয়ে উদাহরণস্বরূপ) VARCHARমধ্যে অন্য ডাটাবেস যাইহোক।
কায়মন

1
... এবং পোস্টগ্র্রেস সিএলওবি সমর্থন না করে , দ্বিতীয় থেকে শেষ পয়েন্ট ধরে না। তুমি ড্রপ-ইন প্রতিস্থাপন সমর্থন করতে সক্ষম হবেন এমনকি মান লগ্ন পারেন। পাশাপাশি খেলোয়াড় এসকিউএল না লিখলে এএনএসআই এসকিউএল লেখার পক্ষে আসল বিশ্বে কার্যকর একটি বিকল্প নয়।
কায়মন

11

text, varcharএবং charসমস্ত বিভিন্ন কারণে ব্যবহৃত হয়। অবশ্যই বাস্তবায়ন পার্থক্য রয়েছে (তারা কত আকার ধারণ করে .. ইত্যাদি), তবে ব্যবহার এবং উদ্দেশ্য সম্পর্কিত বিবেচনাও রয়েছে। আপনি কী ধরণের ব্যবহার করেন তা আপনাকে এতে সংরক্ষণ করা হবে এমন ধরণের ডেটা (বা আমরা সমস্ত কিছুরtext জন্য ব্যবহার করব ) সম্পর্কে কিছু বলে । কোনও কিছুর নির্দিষ্ট দৈর্ঘ্য থাকলে আমরা ব্যবহার করি । যদি এটির একটি ভাল সংজ্ঞায়িত উপরের সীমা সহ পরিবর্তনশীল দৈর্ঘ্য থাকে তবে ব্যবহার করুন । যদি এটির একটি বিশাল অংশ যদি আপনার সামান্য নিয়ন্ত্রণ থাকে তবে সম্ভবত আপনার সেরা বাজি হতে পারে।charvarchartext


3
Sooooooo, একমাত্র আসল পার্থক্য হ'ল সীমা-চেকিংয়ের নকল করা যা সম্ভবত প্রোগ্রাম কোডে হওয়া উচিত?
ইজকাটা

2
@ ইজকাটা - বাস্তবায়নের পার্থক্যও রয়েছে। এটি সীমানা যাচাইয়ের বিষয়ে নয়, এটি ডেটা টাইপ সম্পর্কে । একটি (মার্কিন) জিপ কোড সর্বদা একটি 5 ডিজিটের কোড, সুতরাং 'চর' এর মতো কিছু ব্যবহার করা এই টুকরোটির সংজ্ঞাটির অংশ হয়ে যায়। এটি যদি কেবল বাউন্ড চেকিংয়ের মতো জিনিস ছিল তবে আমরা সকলে কেবলমাত্র সমস্ত কিছুর জন্য একটি ডেটা টাইপ ব্যবহার করতে পারি এবং আমাদের চেকিং এবং কাস্টিং কোডের পাশটি করতে পারি।
সিস্টেম ডাউন

6
@SystemDown যতদূর আমি জানি, char, varchar, এবং textসব একই জমা করার জন্য ডিজাইন করা হয় টাইপ ডাটা। সুতরাং এখানে উভয় উত্তর সীমানা চেকিং সম্পর্কে হয়। যদি দক্ষতার পার্থক্য থাকে তবে সেগুলি কী? কেন আমি ব্যবহার করেন varcharবেশি text?
ইজকাটা

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

4
@ সিস্টেমডাউন যদিও চার্জ হিসাবে ডাক কোডগুলি সংরক্ষণ করা (5) আপনি আন্তর্জাতিককরণ শুরু করলে আপনাকে কামড় দিতে পারে। ইউকে পোস্ট কোডগুলি দৈর্ঘ্যে পরিবর্তিত হয় এবং 5 টি অক্ষর প্রায় পর্যাপ্ত হয় না। যদিও ইউ কে পোস্ট কোডের স্থানটি পার্সিংয়ের জন্য উপযুক্ত কিনা তা আমি জানি না don't
ভ্যাটাইন

5

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

কম্পিউটারগুলি দ্রুততর হয়ে ও আরও মেমরি লাভ করার সাথে সাথে লোকেরা তাদের ডাটাবেসে আরও ডেটা রাখে এবং ফ্যানসিয়ার অনুসন্ধান করে। একটি ডাটাবেসের জন্য সিপিইউ এবং মেমরিটি আজকে ঠিক ততটাই সীমাবদ্ধ রয়েছে যেমনগুলি K৪ কেবি মূল মেমরি এবং 10 এমবি হার্ড ড্রাইভের ( মেইনফ্রেম কম্পিউটারগুলিতে) ছিল।

একটি নির্দিষ্ট সংখ্যক বাইটের সাথে ভেরিয়েবল দৈর্ঘ্যের সংখ্যার চেয়ে ডিল করা অনেক সহজ। 10,000 বাইট 1000,000 এর চেয়ে বেশি ডিল করা সহজ। সুতরাং আপনার ডাটাবেসটি আপনাকে এটি একটি ক্লু দেওয়ার জন্য চায় যাতে এটি আপনাকে মাইক্রোসেকেন্ডে ডেটা টেরাবাইটের ফলাফল থেকে একটি গিগাবাইটের ফলাফল দিতে পারে। আপনি যদি আপনার ডাটাবেসটিকে খুব শক্তভাবে ব্যবহার না করে থাকেন তবে আপনার প্রদত্ত গতির প্রয়োজন হবে না এবং অহেতুক প্রশ্নে বিরক্ত হবেন। তবে আপনার যদি পারফরম্যান্সের প্রয়োজন হয় তবে আপনি এটিকে কিছু ইঙ্গিত দিতে খুশি হবেন।

অন্যান্য উত্তরে যেমন উল্লেখ করা আছে, ব্যবহার করুন charযদি এটি সর্বদা নির্দিষ্ট সংখ্যক অক্ষর ব্যবহার করে varcharতবে দৈর্ঘ্য বিভিন্ন রকম হতে পারে তবে এটি খুব বেশি বড় না হয় (আমার ধারণা সর্বাধিক ডিবিই একে একে আকার হিসাবে charবা textআকারের উপর নির্ভর করে) এবং textযদি এটি হয় যে কোনও দৈর্ঘ্য হতে পারে। আপনার SQL চেষ্টা ব্যবহার করতে পারেন textকলাম, এটা ভাল হতে এটা একরকম সংক্ষেপ এবং এটা করা হতে পারে charবা ছোট varcharকলাম এছাড়াও, তারপর না where's এবং order by' যে s। অবশ্যই, যদি কেবলমাত্র পারফরম্যান্স আপনার পক্ষে গুরুত্বপূর্ণ।

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