ভারচর এবং নাভারচরের মধ্যে পার্থক্য কী?


1352

এটি কি কেবল nvarcharমাল্টিবাইট চরিত্রগুলিকে সমর্থন করে? যদি এটি হয় তবে ব্যবহারের জন্য স্টোরেজ উদ্বেগ ছাড়া অন্য কোনও সত্যই আছে varchars?


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

উত্তর:


1651

একটি nvarcharকলাম যেকোন ইউনিকোড ডেটা সঞ্চয় করতে পারে। একটি varcharকলাম 8 বিট কোডপেজের মধ্যে সীমাবদ্ধ। কিছু লোক মনে করেন এটি varcharব্যবহার করা উচিত কারণ এটি কম জায়গা নেয়। আমি বিশ্বাস করি এটি সঠিক উত্তর নয়। কোডপেজ অসম্পূর্ণতাগুলি একটি ব্যথা এবং ইউনিকোড হ'ল কোডপেজ সমস্যার নিরাময়। আজকাল সস্তা ডিস্ক এবং মেমরির সাথে, কোড পেজগুলির সাথে আর কিছুটা সময় নষ্ট করার কোনও কারণ নেই।

সমস্ত আধুনিক অপারেটিং সিস্টেম এবং বিকাশ প্ল্যাটফর্ম অভ্যন্তরীণভাবে ইউনিকোড ব্যবহার করে। nvarcharপরিবর্তে ব্যবহার varcharকরে আপনি যতবারই ডাটাবেস থেকে পড়বেন বা লিখবেন এনকোডিং রূপান্তরগুলি এড়াতে পারবেন। রূপান্তরগুলি সময় নেয় এবং ত্রুটির ঝুঁকিতে থাকে। এবং রূপান্তর ত্রুটি থেকে পুনরুদ্ধার একটি অ-তুচ্ছ সমস্যা।

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


8
এটি খুবই ভাল তথ্য। সুতরাং আমি যদি সঠিকভাবে বুঝতে পারি যে পছন্দটি শেষ পর্যন্ত পছন্দগুলির মধ্যে একটি হয়ে যায় - কোন উত্সটি সস্তা: প্রসেসর + ডেভলপমেন্ট ওভারহেড বা স্টোরেজ?
ম্যাট ক্যাস্যাট

141
@ ম্যাথেজপ্যাট্রিকক্যাশট - আপনি এটি সেভাবে দেখতে পেলেন। তবে আপনি যদি এমন এক গৌরবময় পৃথিবী কল্পনা করেন যেখানে সমস্ত পাঠ্য ডেটা ইউনিকোডে রয়েছে এবং বিকাশকারীদের কোনও কিছুর এনকোডিং রয়েছে তা নিয়ে কখনও ভাবতে হবে না এবং পুরো ক্লাসের ত্রুটিগুলি কখনই ঘটে না, তবে আপনি দেখতে পাচ্ছেন যে সেখানে রয়েছে সত্যিই কোন পছন্দ।
জেফ্রি এল হুইটলেজ


8
@ মার্টিন স্মিথ - এই ক্ষেত্রে, বর্ণাচর যে সামান্য সুবিধা দেয় (কমপ্যাক্ট স্টোরেজ) তা বিলুপ্ত হয়। আমার ধারণা বার্চর আমার চেয়েও খারাপ!
জেফরি এল হুইলেটজ

9
@ পিটারএলেনওয়েব - আপনি যে কোনও ইউনিকোড ডেটা "সঞ্চয়" করতে পারবেন, কারণ ইউটিএফ -১ in-এ সারোগেট জোড়গুলি ইউসিএস -২ এ সংরক্ষণ করা যেতে পারে যেমন তারা অক্ষর ছিল। এটি ডেটা সঞ্চয় এবং পুনরুদ্ধারের জন্য স্বচ্ছভাবে কাজ করবে। এখন, আপনি যা করতে পারবেন না তা হ'ল বিএমপির বাইরে নির্ভরযোগ্য কেস ট্রান্সফর্মেশন এবং তুলনা করা, তবে আমি সে সম্পর্কে কোনও দাবি করিনি। সুতরাং আপনার যদি প্রক্রিয়াকরণ করতে চান এমন অনেকগুলি ডেসেরেট পাঠ্য থাকে তবে ডাটাবেসের বাইরে এটি করা ভাল। তবে এটি সেখানে সংরক্ষণ করার জন্য এটি ঠিক আছে। (অবশ্যই, ভারাচার সেখানে আপনাকে কোনও সাহায্য করবে না!)
জেফ্রি এল হুইটলেজ

259

ভার্চার : চলক দৈর্ঘ্য, অ-ইউনিকোড অক্ষর ডেটা। ডাটাবেস কোলেশন নির্ধারণ করে যে কোন কোড পৃষ্ঠাতে ডেটা ব্যবহার করে সংরক্ষণ করা হয়।

এনভারচার : চলক দৈর্ঘ্যের ইউনিকোড অক্ষর ডেটা। তুলনা করার জন্য ডাটাবেস কোলেশনের উপর নির্ভরশীল।

এই জ্ঞানের সাথে সজ্জিত, আপনার ইনপুট ডেটার (এএসসিআইআই বনাম ইউনিকোড) যেকোন একটির সাথে মেলে ব্যবহার করুন।


5
ভারচারের ইউনিকোড ডেটা সংরক্ষণ করতে না পারার মতো কি কোনও বিধিনিষেধ আছে? এটি সব 1 এবং 0 এর। আমি আমার ডিবি-র পক্ষে ঠিক তেমন বারানাদার হিসাবে চাইনিজ সামগ্রী সংরক্ষণ করতে সক্ষম। আমি যদিও এর ইউটিএফ -8 নির্দিষ্ট করে রেখেছি। তাহলে কীভাবে কাজ করবে?
নিশান্ট

3
@ নিশান্ত দেরী উত্তর : অবশ্যই আপনি বার্চারে ইউটিএফ -8 সঞ্চয় করতে পারবেন তবে এটি এসকিউএল সার্ভারের স্ট্রিং কার্যগুলি ভেঙে ফেলবে। আপনি যদি নিজের অ্যাপ্লিকেশনের মধ্যে সমস্ত অনুসন্ধান / রূপান্তর সম্পাদন করেন তবে হ্যাঁ, আপনি এটি করতে পারেন (তবে কী লাভ?) এসএস দ্বারা সমর্থিত কেবল ইউনিকোড এনকোডিং হ'ল ইউসিএস -2 (হ্যাঁ, এসএস 2 কে 16 এর আগে ইউটিএফ -16 নয়) এবং এর স্ট্রিং ফাংশন কেবল সেই এনকোডিংয়ের সাথেই কাজ করে। বিটিডাব্লু সূচকগুলি কী? আপনি যদি স্বেচ্ছাচারিতামূলক ডেটা সঞ্চয় করতে চান তবে তার পরিবর্তে আপনি বাইনারিটি আরও ভাল ব্যবহার করতে চান।
অ্যাড্রিয়ানো রেপিটি

হ্যাঁ এটি কেবল স্ট্রিং অনুসন্ধানের ক্রিয়াগুলি ভঙ্গ করে s
নিশান্ত

8
সুতরাং, আপনি জানেন ... এটি "কাজ করে না"। এটি একটি স্টোর floatকরা intএবং যাওয়ার মতো, "নিশ্চিত যে দশমিকগুলি নিখোঁজ হয়।" শুধু না।
user7116

70

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


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

60
ট্যাগস 2 কে মুখে শব্দ রাখার স্বাধীনতা নিতে, আমি মনে করি যে আরও সঠিক বিবৃতিটি হতে পারে 'আন্তর্জাতিককরণ এবং অন্যান্য চরিত্র নির্ধারণের বিষয়গুলির তুলনায় কোনও নতুন অ্যাপ্লিকেশন প্রয়োজনীয় জায়গার বিষয়ে আরও বেশি উদ্বিগ্ন হওয়ার সম্ভাবনা খুব কমই'।
কাউয়ান 21

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

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

1
@ ক্রিস, আমি বিশ্বাস করি আপনি "never"কমপক্ষে প্রযুক্তিগতভাবে আপনার উদ্ধৃতি ব্যবহারের সাথে বৈপরীত্যের যে কোনও ঝুঁকিকে সরিয়ে দিয়েছেন
স্মন্ডোলি

30

এটি কীভাবে ওরাকল ইনস্টল করা হয়েছিল তার উপর নির্ভর করে। ইনস্টলেশন প্রক্রিয়া চলাকালীন, NLS_CHARACTERSET বিকল্প সেট করা আছে। আপনি এটি ক্যোয়ারী সহ সন্ধান করতে সক্ষম হতে পারেন SELECT value$ FROM sys.props$ WHERE name = 'NLS_CHARACTERSET'

যদি আপনার NLS_CHARACTERSET ইউটিএফ 8 এর মতো একটি ইউনিকোড এনকোডিং হয় তবে দুর্দান্ত। VARCHAR এবং এনভিচারার ব্যবহার করে অনেকটা অভিন্ন। এখন পড়া বন্ধ করুন, কেবল এটির জন্য যান। অন্যথায়, বা ওরাকল চরিত্রের সেটটিতে যদি আপনার কোনও নিয়ন্ত্রণ না থাকে তবে পড়ুন।

VARCHAR - ডেটা NLS_CHARACTERSET এনকোডিংয়ে সংরক্ষণ করা হয়। যদি একই সার্ভারে অন্য ডাটাবেস দৃষ্টান্ত থাকে তবে আপনি তাদের দ্বারা সীমাবদ্ধ থাকতে পারেন; এবং বিপরীতে, যেহেতু আপনাকে সেটিংসটি ভাগ করতে হবে। এই জাতীয় ক্ষেত্র সেই অক্ষর সেটটি ব্যবহার করে এনকোড করা যায় এমন কোনও ডেটা এবং অন্য কিছুই সংরক্ষণ করতে পারে । সুতরাং উদাহরণস্বরূপ, যদি অক্ষর সেটটি MS-1252 হয়, আপনি কেবলমাত্র ইংরেজী অক্ষর, মুষ্টিমেয় উচ্চারণের অক্ষর এবং কয়েকটি অন্যান্য (যেমন € এবং -) অক্ষর সংরক্ষণ করতে পারেন। আপনার অ্যাপ্লিকেশনটি কেবলমাত্র কয়েকটি লোকেলের ক্ষেত্রে কার্যকর হবে, বিশ্বের অন্য কোথাও পরিচালনা করতে অক্ষম। এই কারণে, এটি একটি খারাপ ধারণা হিসাবে বিবেচিত হয়।

এনভিচারার - ডেটা একটি ইউনিকোড এনকোডিংয়ে সংরক্ষণ করা হয়। প্রতিটি ভাষা সমর্থন করে। একটি ভাল ধারনা.

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

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

নীচের লাইন: এনভিচারার ব্যবহার করুন! এটি সীমাবদ্ধতা এবং নির্ভরতা এড়ায়, স্টোরেজ স্পেসের জন্য জরিমানা, এবং সাধারণত পারফরম্যান্সের জন্যও সেরা।


42
এটি একটি খুব ভাল উত্তর, প্রশ্নটি এসকিএল-সার্ভার সম্পর্কে ব্যতীত।
উত্তেজিত করে

21

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


16

আমার দুই সেন্ট

  1. সঠিক ডেটাটাইপগুলি ব্যবহার না করে সূচকগুলি ব্যর্থ হতে পারে:
    এসকিউএল সার্ভারে: যখন আপনার কোনও ভোচারার কলামের উপরে একটি সূচক থাকে এবং এটি একটি ইউনিকোড স্ট্রিং উপস্থাপন করে তখন এসকিউএল সার্ভার সূচকটি ব্যবহার করে না। আপনি যখন স্মলইন্ট যুক্ত একটি ইনডেক্সড-কলামে একটি বিগইন্ট উপস্থাপন করেন তখন একই জিনিস ঘটে থাকে। এমনকি বিগিয়ান্ট যদি ছোট আকারে ছোট হয় তবে এসকিউএল সার্ভার সূচকটি ব্যবহার করতে সক্ষম হয় না। আপনার চারপাশের অন্যান্য উপায়ে এই সমস্যাটি নেই (যখন একটি ইনডেক্সড বিগইন্ট ওটি এনভিচারারআর কলামে স্মলআইন্ট বা আনসি কোড সরবরাহ করা হয়)।


  2. ডেটাটাইপগুলি বিভিন্ন ডিবিএমএসের (ডেটাবেজ ম্যানেজমেন্ট সিস্টেম) এর মধ্যে পরিবর্তিত হতে পারে: জেনে রাখুন যে প্রতিটি ডাটাবেসের কিছুটা আলাদা ডেটাটাইপ থাকে এবং ভ্রচারের অর্থ সর্বত্র এক রকম নয়। এসকিউএল সার্ভারে ভ্রচার ও এনভিচার্আর রয়েছে, তবে অ্যাপাচি / ডার্বি ডাটাবেসের কেবলমাত্র ভ্রচার আছে এবং সেখানে ইউনিকোডে ভ্রচারার রয়েছে।


তবে অবশ্যই যদি আপনি আপনার কোডটি যথাযথভাবে লিখছেন (অর্থাত্ প্যারামিটারাইজড কোয়েরিগুলি ব্যবহার করছেন) তবে পয়েন্ট 1 এর ঝুঁকি কম।
পল

14

প্রধানত nvarchar দোকানে ইউনিকোড অক্ষর এবং varchar দোকানে অ-ইউনিকোড অক্ষর।

"ইউনিকোডস" এর অর্থ হল ১--বিট অক্ষর এনকোডিং স্কিম যার অর্থ আরবি, হিব্রু, চীনা, জাপানি, যেমন একক অক্ষর সেটকে এনকোড করা যেতে পারে other

তার মানে ইউনিকোডগুলি সংরক্ষণ করতে অক্ষর প্রতি 2 বাইট ব্যবহার করছে এবং ননুনিকোডগুলি সংরক্ষণ করতে অক্ষর প্রতি মাত্র একটি বাইট ব্যবহার করে। যার অর্থ ইউনিকোডগুলি নন-ইউনিকোডের তুলনায় সঞ্চয় করার জন্য দ্বিগুণ ক্ষমতা প্রয়োজন।


10

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


10

আমি বলব, এটি নির্ভর করে।

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

যদি আপনি একটি ওয়েব অ্যাপ্লিকেশন বিকাশ করেন যেখানে স্ট্রিংগুলি ইউটিএফ -8 হিসাবে আসে এবং ভাষাটি পিএইচপি হয়, যা এখনও ইউনিকোডকে স্থানীয়ভাবে সমর্থন করে না (সংস্করণ 5.x এ), তবে বর্ণাচার সম্ভবত আরও ভাল পছন্দ হবে।


9

যদিও NVARCHARইউনিকোড VARCHARসংরক্ষণ করে তবে আপনার কোলিশনের সাহায্যে আপনার স্থানীয় ভাষাগুলির ডেটা ব্যবহার এবং সংরক্ষণ করতে পারেন consider

শুধু নিম্নলিখিত পরিস্থিতিতে কল্পনা করুন।

আপনার ডিবির কোলেশনটি পার্সিয়ান এবং আপনি VARCHAR(10)ডাটাটাইপে 'আলি' (আলির ফারসি লেখা) এর মতো একটি মান সংরক্ষণ করেন । কোনও সমস্যা নেই এবং এটি সংরক্ষণের জন্য ডিবিএমএস কেবল তিনটি বাইট ব্যবহার করে।

তবে, আপনি যদি অন্য ডেটাবেসে আপনার ডেটা স্থানান্তর করতে চান এবং সঠিক ফলাফলটি দেখতে চান তবে আপনার গন্তব্য ডাটাবেসের লক্ষ্য হিসাবে সমান কোলেশন থাকতে হবে যা এই উদাহরণটিতে ফারসি।

যদি আপনার টার্গেটের জোট আলাদা হয়, আপনি লক্ষ্য ডাটাবেসে কিছু প্রশ্ন চিহ্ন (?) দেখতে পাবেন।

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

আমি বিশ্বাস করি ডিজাইন আলাদা হতে পারে। এটি আপনি যে পরিবেশে কাজ করছেন তার উপর নির্ভর করে।


8

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

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


7

n ভারচার আপনাকে ইউনিকোড অক্ষর সংরক্ষণ করতে সহায়তা করবে। স্থানীয়করণের ডেটা সংরক্ষণ করতে চাইলে এটি যাওয়ার উপায়।


7

যদি কোনও একক বাইট কোনও অক্ষর সংরক্ষণের জন্য ব্যবহার করা হয়, তবে সেখানে 256 টি সম্ভাব্য সংমিশ্রণ রয়েছে এবং এর মাধ্যমে আপনি 256 টি আলাদা অক্ষর সংরক্ষণ করতে পারেন। কোলেশন হ'ল একটি প্যাটার্ন যা অক্ষর এবং বিধিগুলি যেগুলির দ্বারা তাদের তুলনা করে এবং সাজানো হয় তা সংজ্ঞায়িত করে।

1252, যা লাতিন 1 (এএনএসআই), সবচেয়ে সাধারণ। একক বাইট অক্ষর সেটগুলিও বহু ভাষার দ্বারা ব্যবহৃত সমস্ত অক্ষর সংরক্ষণের জন্য অপর্যাপ্ত। উদাহরণস্বরূপ, কিছু এশিয়ান ভাষাগুলিতে কয়েক হাজার অক্ষর রয়েছে, তাই তাদের অবশ্যই অক্ষর প্রতি দুটি বাইট ব্যবহার করা উচিত।

ইউনিকোড স্ট্যান্ডার্ড

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

এসকিউএল সার্ভারের দুটি বিভাগের অক্ষর ডেটাটাইপ রয়েছে:

  • অ-ইউনিকোড (চর, বর্ণচর এবং পাঠ্য)
  • ইউনিকোড (এনসিআর, এনভারচর এবং নেক্সটেক্স)

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


6

আমাকে এখানে বলতে হবে (আমি বুঝতে পেরেছি যে আমি সম্ভবত নিজেকে একটি স্লিটিংয়ের সামনে উন্মুক্ত করতে যাচ্ছি!), তবে অবশ্যই একমাত্র সময় যখন NVARCHARআসলে আরও কার্যকর ( সেখানে আরও লক্ষ্য করুন !) VARCHARযখন সমস্ত জোটের সমস্ত জোটের চেয়ে বেশি নির্ভরশীল সিস্টেম এবং ডাটাবেসের মধ্যে নিজেই একই ...? তাহলে কোলেশন রূপান্তর যাহাই হউক না কেন ঘটতে করেনি এবং তাই করে তোলে VARCHARঠিক টেকসই হিসাবে হিসাবে NVARCHAR

এটি যুক্ত করতে, কিছু ডাটাবেস সিস্টেমে যেমন এসকিউএল সার্ভারের (২০১২ এর আগে) প্রায় পৃষ্ঠা আকার থাকে x 8K। সুতরাং, আপনি যদি অনুসন্ধানযোগ্য ডেটা কোনও TEXTবা NTEXTক্ষেত্রের মতো কিছুতে না রেখে সংরক্ষণের দিকে তাকিয়ে থাকেন তবে VARCHAR8k এর পূর্ণ স্থান সরবরাহ করে যেখানে NVARCHARকেবল 4k সরবরাহ করা হয় (দ্বিগুণ বাইটস, স্পেস দ্বিগুণ)।

আমার ধারণা, সংক্ষিপ্তসার হিসাবে, উভয়ের ব্যবহার নির্ভর করে:

  • প্রকল্প বা প্রসঙ্গ
  • অবকাঠামো
  • ডাটাবেস সিস্টেম

6

SQL সার্ভার VARCHAR এবং এনভিচারকার ডেটা টাইপের মধ্যে পার্থক্য অনুসরণ করুন । এখানে আপনি একটি খুব বর্ণনামূলক উপায়ে দেখতে পারে।

জেনার্নভর্চারে ইউনিকোড হিসাবে ডেটা সঞ্চয় করে, সুতরাং, যদি আপনি কোনও ডাটা কলামে বহুভাষিক তথ্য (একাধিক ভাষা) সঞ্চয় করতে চলেছেন তবে আপনার এন বৈকল্পিকের প্রয়োজন need


এটি একটি খুব দরকারী লিঙ্ক, তবে আপনার উত্তরটি এর চেয়ে বেশি কিছু নয়: একটি লিঙ্ক।
রাবারডাক

ckuhn203, আমি আপনাকে এটি দেখতে যাচ্ছি না
প্রদীপ কেশরওয়ানি

6

মধ্যে মূল পার্থক্য Varchar(n)এবং nvarchar(n)হল: এখানে চিত্র বর্ণনা লিখুন

Varchar(চলক দৈর্ঘ্য, অ-ইউনিকোড অক্ষর ডেটা) আকার 8000 অবধি। 1. এটি একটি পরিবর্তনশীল দৈর্ঘ্যের ডেটা টাইপ

  1. অ-ইউনিকোড অক্ষর সংরক্ষণ করতে ব্যবহৃত হয়

  2. প্রতিটি চরিত্রের জন্য 1 বাইট স্থান দখল করে

এখানে চিত্র বর্ণনা লিখুন

Nvarchar: পরিবর্তনশীল দৈর্ঘ্যের ইউনিকোড অক্ষর ডেটা।

1. এটি একটি পরিবর্তনশীল দৈর্ঘ্যের ডেটা টাইপ

2. ইউনিকোড অক্ষর সংরক্ষণ করার জন্য ব্যবহৃত।

  1. ইউনিকোড এনকোডিংয়ে ডেটা সংরক্ষণ করা হয়। প্রতিটি ভাষা সমর্থন করে। (উদাহরণস্বরূপ আরবি, জার্মান, হিন্দি ইত্যাদি ভাষা)

6

Ff 47000 খ্যাতিমান স্কোর সহ জেফরি এল হুইটলজি nvacharar ব্যবহারের পরামর্শ দেয়

Solomon 33200 খ্যাতি স্কোর সহ সলোমন রুটজির পরামর্শ দেয়: সর্বদা এনভিচারার ব্যবহার করবেন না। এটি একটি অত্যন্ত বিপজ্জনক এবং প্রায়শই ব্যয়বহুল / দৃষ্টিভঙ্গি /

ভারচর এবং এনভারচার এসকিউএল সার্ভার ডেটা ধরণের মধ্যে পারফরম্যান্সের মূল পার্থক্যগুলি কী কী?

https://www.sqlservercentral.com/articles/disk-is-cheap-orly-4

এত উচ্চ খ্যাতির উভয় ব্যক্তিই, কোন লার্নিং এসকিএল সার্ভারের ডেটাবেস বিকাশকারী কী নির্বাচন করে?

আপনি যদি পছন্দগুলিতে সামঞ্জস্য না রাখেন তবে পারফরম্যান্স সম্পর্কিত সমস্যাগুলির বিষয়ে উত্তর এবং মন্তব্যে অনেক সতর্কতা রয়েছে।

পারফরম্যান্সের জন্য মন্তব্য / প্রো কন / এনভারচার রয়েছে।

পারফরম্যান্সের জন্য মন্তব্যগুলি প্রো / কন বারচার রয়েছে।

আমার শত শত কলাম সহ একটি টেবিলের জন্য একটি বিশেষ প্রয়োজনীয়তা রয়েছে যা নিজেই সম্ভবত অস্বাভাবিক?

এসকিউএল * সার্ভার 2012-এর 8060 বাইট টেবিল রেকর্ড আকারের সীমাটির কাছাকাছি যাওয়া এড়াতে আমি বার্ছার নির্বাচন করছি।

আমার কাছে এনভারচার ব্যবহার এই 8060 বাইট সীমা ছাড়িয়ে যায়।

আমি আরও ভাবছি যে প্রাথমিক কোড সারণীর ডাটা টাইপের সাথে সম্পর্কিত কোড টেবিলগুলির ডেটা টাইপগুলির সাথে আমার মিল করা উচিত।

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


1

nvarcharvarcharআমাদের কোড ত্রুটি মুক্ত করার জন্য তুলনায় ব্যবহার করা নিরাপদ (টাইপ ম্যাচম্যাচিং) কারণ nvarcharইউনিকোড অক্ষরগুলিকেও অনুমতি দেয়। যখন আমরা whereএসকিউএল সার্ভার ক্যোয়ারীতে শর্ত ব্যবহার করি এবং আমরা যদি =অপারেটর ব্যবহার করি তবে এটি কিছু সময় ত্রুটি ছুঁড়ে দেবে। এর সম্ভাব্য কারণ হ'ল আমাদের ম্যাপিং কলামটি আলাদা হবে varchar। আমরা যদি nvarcharএই সমস্যায় এটি সংজ্ঞায়িত করি তবে আমার ঘটনা ঘটবে না। তবুও আমরা varcharএই বিষয়টিকে আঁকড়ে ধরে এড়া করি এবং আমরা LIKEকী শব্দটি না দিয়ে আরও ভাল ব্যবহার করি =

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