আমি দেখতে পাচ্ছি এমন কোনও ভাল কারণ আছে যা ভিচ্চার (255) প্রায়শই ব্যবহৃত হয় (অন্য দৈর্ঘ্যের বিপরীতে)?


158

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

আমি অবশ্যই উপলব্ধি করেছি যে যদি আপনি কোনওভাবে স্ট্রিংয়ের সর্বাধিক দৈর্ঘ্য জানেন তবে একটি শক্ত সীমা আরও আদর্শ হবে। তবে আপনি যদি VARCHAR (255) ব্যবহার করছেন যা সম্ভবত এটি নির্দেশ করে যে আপনি সর্বোচ্চ দৈর্ঘ্য জানেন না, কেবলমাত্র এটি "শর্টিশ" স্ট্রিং।


নোট: আমি এই প্রশ্নের (পাওয়া varchar (255) বনাম tinyblob বনাম tinytext ), যা বলছেন যে VARCHAR ( এন ) প্রয়োজন এন জন্য সঞ্চয়স্থান এর +1 বাইট এন <= 255, এন এর সঞ্চয়স্থানের মধ্যে +2 বাইট এন > 255। এটাই কি একমাত্র কারণ? এটি নির্বিচারে মনে হয়, যেহেতু আপনি কেবল ভিআচআরএআর (256) এর তুলনায় কেবল দুটি বাইট সাশ্রয় করবেন এবং আপনি ভিচারার (253) ঘোষণা করে আরও দুটি বাইট সহজেই সাশ্রয় করতে পারবেন।

উত্তর:


109

VARCHARIcallyতিহাসিকভাবে , 255 টি অক্ষর প্রায়শই কিছু ডিবিএমএস- এ সর্বাধিক দৈর্ঘ্যের হয়ে থাকে এবং আপনি যদি ইউটিএফ -8 ব্যবহার করতে চান এবং কলামটি সূচিকৃত করতে চান তবে (সূচী দৈর্ঘ্যের সীমাবদ্ধতার কারণে) এটি সর্বাধিক কার্যকর হিসাবে সক্রিয় হয় wind


4
@ চার্লসব্রেটানা: আপনার উদ্ধৃত বাক্য বাক্যটি যদি আপনি পড়ে থাকেন তবে আপনি যে অনুরোধ করছেন তার সঠিক ব্যাখ্যাটি পাবেন।
বিশৃঙ্খলা

2
@ চার্লসব্রেটানা: "নকল ইউটিএফ -8" বলতে আমি মাইএসকিউএল এর "ইউটিএফ 8" এনকোডিংকে বোঝাতে চাই, যা আমি চরিত্র অনুসারে 3 বাইট সংরক্ষণের (এবং সীমাবদ্ধ) উল্লেখ করেছি। এটি ইউটিএফ -8 এর খুব ভাল সংস্করণ নয়; আপনি যদি মাইএসকিউএলে শালীন ইউটিএফ -8 চান, আপনাকে এটির "utf8mb4" এনকোডিং ব্যবহার করতে হবে। তবে লোকেরা এটি না জানার এবং "ইউটিএফ 8" এর সাথে যাওয়ার সম্ভাবনা বেশি রয়েছে এবং অন্য কোনও এনকোডিংয়ের তুলনায় ইউটিএফ -8 চাইবে বলে অনেক বেশি সম্ভাবনা রয়েছে, সুতরাং, পূর্ববর্তী সময়ে, তারা কোনও ভিআরচআরআর-এর 255 অক্ষরের সর্বাধিক সূচী দৈর্ঘ্য সহ গতিতে বাধা দেয়। আপনার বিস্ময়কর সত্ত্বেও।
বিশৃঙ্খলা

3
@ চার্লসব্রেটানা: আমি এখন এটি তিনবার ব্যাখ্যা করেছি এবং একটি জিনিসও বদলায় নি। মাইএসকিউএল এর সূচী দৈর্ঘ্য এখনও 767 বাইট, 3-বাইট ইউটিএফ -8 অক্ষর এনকোড করতে প্রয়োজনীয় বাইট সংখ্যা এখনও 3, এবং মেঝে (767/3) এখনও 255 beg ভিক্ষুকদের বিশ্বাস সম্পর্কে বিভ্রান্ত হওয়ার জন্য কিছু খুঁজে পাওয়ার আপনার সংকল্প ।
বিশৃঙ্খলা

1
@ চার্লসব্রেটানা (এই পুরো দলের জন্য দেরী হওয়ার জন্য দুঃখিত) আমি কোনও ডিবি বিশেষজ্ঞ নই, তবে বিশৃঙ্খলাটি কী বলছে তা আমি মনে করি: হ্যাঁ একটি 'নকল ইউটিএফ -8' কলামটি 255 টিরও বেশি অক্ষরের হতে পারে তবে সূচকটি হবে কেবলমাত্র ভারচারের প্রথম 255 টি অক্ষর নিয়ে কাজ করুন, আপনি যদি পুরোপুরি সূচী চান তবে এটি কার্যকরভাবে একটি কলামের সর্বাধিক তৈরি করে। এখন আমি কেবল তার ব্যাখ্যাগুলি বুঝতে পেরেছি, আমি ভুল হতে পারি, আমি মোটেই এসকিউএল সূচীতে বিশেষজ্ঞ নই।
ফ্রান্সিস লর্ড

2
@ চারলেসব্রেটানা যদি আপনি কেওসের উত্তরটি সঠিকভাবে দেখেন তবে আপনি এটি দুটি অংশে বিভক্ত দেখতে পাবেন: ১. ভারচারের (২৫৫) এত ​​সাধারণ হওয়ার পিছনে historicalতিহাসিক কারণ (এটি কিছু পুরানো ডিবিএমএসে সর্বাধিক ব্যবহৃত হত), ২। আজও, এটি এখনও কারও কারও জন্য সীমাবদ্ধ কারণ আগে আলোচনা করা সূচি সীমাবদ্ধতার কারণে, পর্ব 1 এবং 2 লিঙ্কযুক্ত নয়। পার্ট 1 হ'ল প্রশ্নের আসল উত্তর, পার্ট 2 একটি পার্শ্ব নোট যা এখনও প্রশ্নের সাথে প্রাসঙ্গিক কারণ এটি ব্যাখ্যা করে যে কেন আজও এটি এখনও একটি সীমাবদ্ধতা হতে পারে। (অবিরত ->)
ফ্রান্সিস লর্ড

161

255 ব্যবহার করা হয়েছে কারণ এটি 8-বিট সংখ্যার সাথে গণনা করা যায় এমন সর্বাধিক সংখ্যক অক্ষর। এটি 8-বিট গণনাটির ব্যবহার সর্বাধিক করে তোলে, 255 এর উপরে বর্ণগুলি গণনা করার জন্য অপ্রয়োজনীয়ভাবে অন্য পুরো বাইটের প্রয়োজন হয় না।

যখন এইভাবে ব্যবহার করা হয়, ভারচর আপনার পাঠ্য সংরক্ষণ করতে কেবল বাইটের সংখ্যা +1 ব্যবহার করে, তাই আপনি ক্ষেত্রের অক্ষরের সংখ্যায় একটি হার্ড সীমা (50 এর মতো) না চাইলে আপনি এটি 255 তেও সেট করতে পারেন।


90
আমি এই বাক্যাংশটি পছন্দ করি: "স্পষ্টভাবে অন্য একটি সম্পূর্ণ বাইট প্রয়োজন"। =)
মুসিজেনিসিস 21

7
এটি কি ডিবিগুলির পক্ষে সত্য যেখানে ভ্যাচারারগুলি ইউটিএফ -8 রয়েছে?
এন্টাক

1
@ আনতাক: মাইএসকিউএল-এ, ইনোডিবি ব্যবহার করে, কোনও কী কলাম 767 বাইটের চেয়ে বড় হতে পারে না। যদি কোনও ভিচারার কলামটি ইউটিএফ 8 হয় (যার অর্থ প্রতিটি চরটি 3 বাইট পর্যন্ত নিতে পারে), কলামটির সর্বাধিক অনুমোদিত দৈর্ঘ্য হল তল (767/3) = 255 I'm আমি ধরে নিচ্ছি যে "767" ঠিক সেই কারণে বেছে নেওয়া হয়েছিল।
ব্লুরাজা - ড্যানি পিফ্লুঘুফুট

1
চরসেটটি যদি হয়utf8 , varchar(85)তবে সেই সীমাটি কিসের মধ্য দিয়ে দৈর্ঘ্য বাইটকে এক থেকে দুটি বাইট অতিক্রম করবে । যদি এটি হয় utf8mb4, এটি varchar(63)। কারণ তারা সর্বাধিক যা করার জন্য একটি করা.এই গুরুত্বপূর্ণ VARCHAR দৈর্ঘ্য অনলাইন ALTER টেবিল ব্যবহারের মাধ্যমে বাড়ানো যেতে পারে । ফলস্বরূপ, আমি varchar(2) charset utf8কলামের সাথে একটি সারণী তৈরি করে এবং এটিকে দেওয়া কতদূর প্রসারিত করতে পেরেছি তা দেখে আমি এই সংখ্যাগুলি পেয়েছি ALGORITHM=INPLACE
এন্টাক

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

23

সম্ভবত উভয়ই এসকিউএল সার্ভার এবং সাইব্যাস (দু'জনের সাথে পরিচিত আমি পরিচিত) একটি VARCHARকলামে অক্ষরের সংখ্যাতে সর্বাধিক 255 অক্ষর ছিল । এসকিউএল সার্ভারের জন্য, এটি ১৯৯/ / ১৯৯7 বা তার আরও 7 সংস্করণে পরিবর্তিত হয়েছিল ... তবে পুরানো অভ্যাসগুলি কখনও কখনও কঠোরভাবে মারা যায়।


8
নির্দিষ্ট ডিবি এবং সংস্করণ উদ্ধৃত করার জন্য +1। এবং "পুরানো অভ্যাসগুলি হার্ড মারা যায়" সম্ভবত সকলের সত্যবাদী উত্তর।
অ্যান্ড্রু এম

17

আমি আক্ষরিক প্রশ্নের উত্তর দিতে যাচ্ছি: না , আপনি ভিচারার (255) প্রায়শই ব্যবহার করা দেখতে পাওয়ার কোনও ভাল কারণ নেই ( অন্যান্য উত্তরগুলিতে যেমন আলোচনা করা হয়েছে ঠিক তেমন কারণ নয় , কারণ রয়েছে)। আপনি এমন অনেক প্রকল্পের সন্ধান পাবেন না যা বিপর্যয়করভাবে ব্যর্থ হয়েছে কারণ স্থপতি VARCHAR (255) এর পরিবর্তে VARCHAR (300) পছন্দ করেছেন। আপনি ভ্রচারের পরিবর্তে সিএইচএআর নিয়ে কথা বলছিলেন এমনকি এটি মোটামুটি তুচ্ছতার বিষয় হবে।


255 এর মধ্যে 1 বাইট 0.4%। কখনও কখনও আপনি শেষ অর্ধেক বা তার বেশি যত্নশীল। কখনও কখনও আপনি না। যদি আপনি হোস্টিং করেন এবং পারফেক্ট ব্যয় দশ ডলারের মধ্যে চলে যায় তবে আপনি সম্ভবত পাত্তা দেবেন না। যদি তারা লক্ষ লক্ষ লোকের মধ্যে চলে যায় তবে তারা সম্ভবত তা করে।
এডওয়ার্ড ব্রে

2
@ অ্যাডওয়ার্ড্রে: যদি মুর আইনটি এখনও সঠিকভাবে ধরে থাকে তবে আমার উত্তরটি আমি যখন লিখেছিলাম তখন তার চেয়ে 16 গুণ বেশি বৈধ।
মুসিজিনিসিস

যতক্ষণ না আমরা 16 গুণ বেশি উপায় আবিষ্কার করতে পারি যে কম্পিউটার আমাদের সহায়তা করতে পারে। গতি এখনও একটি বৈশিষ্ট্য।
এডওয়ার্ড ব্রে

14

যখন আপনি বলছেন যে 2^8আপনি পেয়েছেন 256, তবে কম্পিউটারের পদগুলিতে সংখ্যাটি শুরু হয় 0। সুতরাং, তারপরে আপনি এটি পেয়েছেন 255, আপনি এটি আইপি বা আইপি নিজেই একটি ইন্টারনেট মাস্কে অনুসন্ধান করতে পারেন।

255 একটি 8 বিট পূর্ণসংখ্যার সর্বাধিক মান: 11111111 = 255

এটা কি সাহায্য করে?


1
পূর্ণসংখ্যার সাহায্যে, আপনি 0 থেকে শুরু করে গণনা 255 এ শুরু করে But 0? আমি স্ট্রিং_এই দৈর্ঘ্যের () ফলাফলের কারণে পুরোপুরি এখনও ভার্চর (256) এর সাথে একমত নই, তবে আমি সত্যই নিশ্চিত নই।
হোল্ডঅফহাঙ্গার

1
একটি ডাটাবেসে @ হোল্ডঅফহ্যাঞ্জার স্ট্রিংগুলির দৈর্ঘ্য শূন্যের অক্ষর হতে পারে, সুতরাং আট বিটগুলিতে দৈর্ঘ্য 0 এবং 255 এর মধ্যে সঞ্চিত থাকায় দৈর্ঘ্যের জায়েজ পরিসীমা হতে পারে you আপনি যদি বলতে চান যে স্ট্রিংগুলিতে কমপক্ষে একটি অক্ষর থাকতে হবে তবে আপনি আট বিট দৈর্ঘ্যের 256-অক্ষরের স্ট্রিং সমর্থন করতে পারে।
ফোগ

7

নোট: আমি এই প্রশ্নের (পাওয়া varchar (255) বনাম tinyblob বনাম tinytext ), যা বলছেন যে VARCHAR ( এন ) প্রয়োজন এন জন্য সঞ্চয়স্থান এর +1 বাইট এন <= 255, এন এর সঞ্চয়স্থানের মধ্যে +2 বাইট এন > 255। এটাই কি একমাত্র কারণ? এটি নির্বিচারে মনে হয়, যেহেতু আপনি কেবল ভিআচআরএআর (256) এর তুলনায় কেবল দুটি বাইট সাশ্রয় করবেন এবং আপনি ভিচারার (253) ঘোষণা করে আরও দুটি বাইট সহজেই সাশ্রয় করতে পারবেন।

না, আপনি 253 ঘোষণা করে দুটি বাইট সংরক্ষণ করবেন না the বর্ণের প্রয়োগটি সম্ভবত দৈর্ঘ্যের কাউন্টার এবং একটি পরিবর্তনশীল দৈর্ঘ্য, অবিচ্ছিন্ন অ্যারে। এর অর্থ হ'ল আপনি যদি কোনও ভারচারে "হ্যালো" সঞ্চয় করেন (255) আপনি 6 বাইট দখল করবেন: দৈর্ঘ্যের জন্য একটি বাইট (সংখ্যা 5) এবং পাঁচটি অক্ষরের জন্য 5 বাইট।


3
এই বিবৃতিটি সমস্ত ডাটাবেসের ক্ষেত্রে সত্য নয়। অনেক ডাটাবেস টেবিলগুলিতে প্রদত্ত আকারের বার্চার ক্ষেত্রগুলি ব্যবহার করে যাতে সেই ক্ষেত্রটি যখন একটি সারির জন্য পরিবর্তন করা হয় তখন তাদের চারপাশে সারি সরাতে হবে না।
সিঙ্গেলাইজেশন ইলিমিনেশন

হ্যাঁ তুমিই ঠিক. এটি বাস্তবায়ন নির্ভর। কী আছে তা দেখতে আপনাকে বিক্রেতার ম্যানুয়ালটি পরীক্ষা করতে হবে
স্টেফানো বোরিনি

2
এটি জায়েয হতে পারে, তবে VARCHARসেভাবে প্রয়োগ করা পরিবর্তে ব্যবহারের পুরো পয়েন্টকে পরাস্ত করে । VARCHARCHAR
dan04

4

একটি স্বাক্ষরবিহীন 1 বাইট নম্বর অন্তর্ভুক্ত সহ [0-255] ব্যাপ্তি থাকতে পারে। সুতরাং আপনি যখন 255 দেখেন, এটি বেশিরভাগ কারণে প্রোগ্রামাররা বেসে ভাবেন10 (রসিকতা পান?) :)

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


4

MsOffice (সংস্করণ 2000 বা 2002 অবধি) এর মতো অনেক অ্যাপ্লিকেশনে, প্রতি ঘরে প্রতি ক্যারেক্টারের সর্বাধিক সংখ্যা ছিল 255। অ্যাপ্লিকেশনগুলিতে / ক্ষেত্রগুলিতে 255 টিরও বেশি অক্ষর পরিচালনা করতে সক্ষম প্রোগ্রামগুলি থেকে ডেটা স্থানান্তর করা একটি দুঃস্বপ্ন। বর্তমানে সীমা কম বাধা হচ্ছে less


2

0000 0000 -> এটি একটি 8-বিট বাইনারি নম্বর। একটি অঙ্ক কিছুটা উপস্থাপন করে।

আপনি যেমন গণনা:

0000 0000 → (0)

0000 0001 → (1)

0000 0010 → (2)

0000 0011 → (3)

প্রতিটি বিট দুটি মানগুলির মধ্যে একটি হতে পারে: চালু বা বন্ধ। মোট সর্বোচ্চ সংখ্যাকে গুণ দ্বারা উপস্থাপন করা যেতে পারে:

2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 - 1 = 255

অথবা

2^8 - 1. 

আমরা একটিকে বিয়োগ করি কারণ প্রথম সংখ্যাটি 0 হয়।

255 মানগুলি বেশ কিছুটা (কোনও পাং উদ্দেশ্যে নয়) ধরে রাখতে পারে।

যেহেতু আমরা আরও বিট ব্যবহার করি সর্বাধিক মান তাত্ক্ষণিকভাবে উপরে যায়। অতএব অনেক উদ্দেশ্যে, আরও বিট যুক্ত করা ওভারকিল।


1

আর একটি কারণ হতে পারে যে উইন্ডোজের খুব পুরানো ডেটা অ্যাক্সেস লাইব্রেরিতে যেমন আরডিও এবং এডিও (সিওএম সংস্করণ ADO.NET নয়) 255 টিরও বেশি অক্ষর সহ একটি কলাম থেকে ডেটা পেতে আপনাকে একটি বিশেষ পদ্ধতি, গেটচ্যাঙ্ক কল করতে হয়েছিল। যদি আপনি কোনও ভারচার কলামটি 255 এ সীমাবদ্ধ করেন তবে এই অতিরিক্ত কোডটি প্রয়োজনীয় ছিল না।

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