কলাম ডেটাটাইপগুলিতে BYTE এবং CHAR এর মধ্যে পার্থক্য


166

ওরাকলে, এর মধ্যে পার্থক্য কী:

CREATE TABLE CLIENT
(
 NAME VARCHAR2(11 BYTE),
 ID_CLIENT NUMBER
)

এবং

CREATE TABLE CLIENT
(
 NAME VARCHAR2(11 CHAR), -- or even VARCHAR2(11)
 ID_CLIENT NUMBER
)

উত্তর:


265

আসুন ধরে নেওয়া যাক ডাটাবেস অক্ষর সেটটি ইউটিএফ -8, যা ওরাকলের সাম্প্রতিক সংস্করণগুলিতে প্রস্তাবিত সেটিংস। এই ক্ষেত্রে, কিছু অক্ষর ডাটাবেসে সঞ্চয় করতে 1 বাইটের বেশি গ্রহণ করে।

আপনি যদি ক্ষেত্রটিকে এই হিসাবে সংজ্ঞায়িত করেন VARCHAR2(11 BYTE), অরাকল স্টোরের জন্য 11 টি বাইট ব্যবহার করতে পারে তবে আপনি সম্ভবত 11 টি অক্ষর ক্ষেত্রের মধ্যে রাখতে পারবেন না কারণ তাদের মধ্যে কিছু সংরক্ষণের জন্য একাধিক বাইট যেমন, অ-ইংরেজি অক্ষর সংরক্ষণ করে।

VARCHAR2(11 CHAR)আপনি ওরাকলকে বলার সাথে সাথে ক্ষেত্রটি সংজ্ঞায়িত করে এটি 11 টি অক্ষর সংরক্ষণ করার জন্য পর্যাপ্ত জায়গা ব্যবহার করতে পারে, প্রতিটি একক জমা করার জন্য এটি কতগুলি বাইট নেয় তা বিবেচনা করে না। একটি একক অক্ষরের জন্য 4 বাইট পর্যন্ত প্রয়োজন হতে পারে।


55
নোট করুন যে চরিত্রের দৈর্ঘ্যের শব্দার্থকগুলি এটির জন্য 4000 বাইট সর্বাধিক দৈর্ঘ্যকে প্রভাবিত করে না VARCHAR2। একটি ঘোষণার জন্য VARCHAR2(4000 CHAR)যদি কিছু চরিত্রের একাধিক বাইট স্টোরেজ প্রয়োজন হয় তবে 4000 টিরও কম অক্ষরের অনুমতি দেওয়া হবে।
জাস্টিন গুহ

@ ডেভিড সাইকস কি এনভিচারার (১১) এর সাথে শব্দার্থবিজ্ঞানের সাথে একই রকম?
নেপ

@ ন্যাপ যতদূর আমি জানি না। আমি বিশ্বাস করি যে এনভিআর্কার প্রকারের ঘোষণার আকারের প্যারামিটারটির VrcAR2 এর মতো অর্থ রয়েছে। অর্থাত্ এনভিচারার চরিত্রের সেটটিতে 11 টি অক্ষরের (বাইট নয়) পর্যাপ্ত সঞ্চয় স্থান নিশ্চিত করতে আপনি এনভিচারার (১১ টি CHAR) বলবেন। দ্রষ্টব্য: আমি আসলে এটি পরীক্ষা করে দেখিনি। আমি কখনও এনভিসার্চার ব্যবহার করি নি।
ডেভিড সেকস

দুটি: হেক্স-এনকোডড মানের চারটি অক্ষর (অর্থাত "0xFF") বা তিন দশমিক অক্ষর (অর্থাত "255") এর মধ্যে পার্থক্যটি আরও চিত্রিত করার জন্য যখন একক বাইট হিসাবে উপস্থাপন করা যায়: 11111111. তখন এটি হতে পারে বিট ফ্ল্যাগগুলির জন্য (8 টি সেটিংস পর্যন্ত) বিটওয়াইস ক্রিয়াকলাপ ইত্যাদির জন্য দরকারী হোন
ম্যাট বোরজা

নোট করুন যে ASCII চরিত্র হিসাবে 1 (ডেস্ক। 49) 1001001 যেখানে কিছুটা 1 00000001.
ম্যাট বোরজা

21

একটিতে 11 বাইটের জন্য ঠিক স্থান রয়েছে অন্যটি হ'ল 11 টি অক্ষরের জন্য। ইউনিকোড ভেরিয়েন্টের মতো কিছু অক্ষর চর প্রতি একাধিক বাইট ব্যবহার করতে পারে তাই 11 বাইট ক্ষেত্রটিতে এনকোডিংয়ের উপর নির্ভর করে 11 টিরও কম অক্ষর থাকতে পারে।

Http://www.joelonsoftware.com/articles/Unicode.html এও দেখুন


17

সিস্টেম কনফিগারেশনের উপর নির্ভর করে BYTES এ মেশানো CHAR এর আকার পৃথক হতে পারে। আপনার উদাহরণগুলিতে:

  1. 11 বিওয়াইটিইতে ক্ষেত্র সীমাবদ্ধ করে
  2. 11 টি CHAR অ্যাক্টারে ক্ষেত্র সীমাবদ্ধ করে


উপসংহার: 1 টি CHAR 1 BYTE এর সমান নয়।


4

আমি নিশ্চিত না যেহেতু আমি একজন ওরাকল ব্যবহারকারী নই তবে আমি ধরে নিয়েছি যে আপনি যখন ইউনিকোড (ইউটিএফ -16 / 32) এর মতো মাল্টি-বাইট চরিত্র সেট ব্যবহার করেন তখন পার্থক্যটি ত্রুটিযুক্ত। এই ক্ষেত্রে, 11 বাইট 11 টিরও কম অক্ষরের জন্য অ্যাকাউন্ট করতে পারে।

এছাড়াও ক্ষেত্রের ধরণগুলি উচ্চারণযুক্ত অক্ষর বা কেস সম্পর্কিত আলাদাভাবে আচরণ করা যেতে পারে, উদাহরণস্বরূপ 'বাইনারিফিল্ড (ete) = "été"' মিলবে না যখন 'চরফিল্ড (ete) = "été"' সম্ভবত (আবার ওরাকল সম্পর্কে নিশ্চিত নয়) ।

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