বারচর এবং এনভারচরের মধ্যে পার্থক্য লিখুন


59

বর্তমানে আমাদের এসকিউএল সার্ভার ২০১২ ডাটাবেসে আমরা ব্যবহার করছি varcharএবং আমরা এটি পরিবর্তন করতে চাই nvarchar। আমি এটি করার জন্য একটি স্ক্রিপ্ট তৈরি করেছি।

আমার প্রশ্ন হ'ল এসকিউএল সার্ভার varcharবনাম nvarcharকলামগুলিতে কীভাবে লেখেন ? আমাদের উদ্বিগ্ন বেশ কয়েকটি ব্যাকএন্ড পদ্ধতি রয়েছে।

সম্পাদনা করুন:
এটি সাহায্য করে কিনা তা নিশ্চিত নন তবে কলামগুলিতে সূচি, চ / ক বা কোনও বাধা নেই।


উত্তর:


46

আপনার অবশ্যই নিশ্চিত হওয়া দরকার যে আপনি ইউনিকোড স্ট্রিংটি একটি এন প্রিফিক্সের সাথে উপস্থাপন করেছেন। উদাহরণস্বরূপ এগুলি ভিন্নভাবে কাজ করবে যদি অন্তর্নিহিত ডেটা টাইপ হয় NVARCHAR:

CREATE TABLE dbo.t(c NVARCHAR(32));

INSERT dbo.t(c) SELECT 'រៀន';
INSERT dbo.t(c) SELECT 'នរៀ';
INSERT dbo.t(c) SELECT N'រៀន';

SELECT c FROM dbo.t;

SELECT c FROM dbo.t WHERE c = 'រៀន';
SELECT c FROM dbo.t WHERE c = N'រៀន';

ফলাফল:

c
----
??? -- not stored correctly
??? -- not stored correctly
រៀន -- stored correctly!

c
----
???
??? -- probably not expected, however all Unicode characters have been changed to ?

c
----
រៀន

মোবাইল ডিভাইসগুলিতে বা ক্ষয়প্রাপ্ত ব্রাউজারগুলিতে যা প্রকৃত ইউনিকোড অক্ষরের পরিবর্তে বাক্স অক্ষর দেখায়, তাদের দেখতে এটির মতো:

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


37

সবচেয়ে বড় উদ্বেগ হ'ল nvarcharচরিত্র অনুসারে 2 বাইট ব্যবহার করে, যেখানে varchar1 ব্যবহার করে uses সুতরাং, nvarchar(4000)সমান পরিমাণ স্টোরেজ varchar(8000)* ব্যবহার করে uses

আপনার সমস্ত চরিত্রের ডেটার পাশাপাশি দ্বিগুণ স্টোরেজ স্পেসের প্রয়োজন রয়েছে, এর অর্থ এটিও:

  • nvarchar8060 বাইট সারি সীমা / 8000 বাইট অক্ষরের কলাম সীমাতে সারি রাখার জন্য আপনাকে সংক্ষিপ্ত কলামগুলি ব্যবহার করতে হতে পারে ।
  • আপনি যদি nvarchar(max)কলামগুলি ব্যবহার করছেন তবে এগুলি তার চেয়ে শীঘ্রই অফ-সারিতে ঠেলে দেওয়া varchar(max)হবে।
  • nvarchar৯০০-বাইট সূচি কী সীমাতে থাকার জন্য আপনাকে সংক্ষিপ্ত কলামগুলি ব্যবহার করতে হতে পারে (আপনি কেন এত বড় সূচি কী ব্যবহার করতে চান তা আমি জানি না, তবে আপনি কখনই জানেন না)।

এর বাইরে, nvarcharইউনিকোড পরিচালনা করার জন্য আপনার ক্লায়েন্ট সফ্টওয়্যারটি নির্মিত বলে ধরে নিয়ে কাজ করা খুব আলাদা নয়। SQL সার্ভার স্বচ্ছভাবে একটি upconvert হবে varcharথেকে nvarchar, তাই আপনি কঠোরভাবে যদি না আপনি 2-বাইট (অর্থাত ইউনিকোড) আক্ষরিক অক্ষর ব্যবহার করছেন স্ট্রিং লিটারেল জন্য N উপসর্গ প্রয়োজন হবে না। ভোটদান যে সচেতন হতে হবে nvarcharকরার varbinaryউৎপাদনের সঙ্গে একই করছেন চেয়ে ভিন্ন ফলাফল varchar। গুরুত্বপূর্ণ বিষয়টি হ'ল অ্যাপ্লিকেশনটি চালিয়ে যাওয়ার জন্য আপনার প্রতিটি বারচর আক্ষরিক সাথে সাথে একটি এনভারচার আক্ষরিকে পরিবর্তন করতে হবে না, যা প্রক্রিয়াটি সহজ করতে সহায়তা করে।

* আপনি ডাটা কম্প্রেশন ব্যবহার করেন তাহলে (লাইটওয়েট সারি কম্প্রেশন যথেষ্ট, এন্টারপ্রাইজ এডিশন প্রয়োজনীয় আগে SQL সার্ভার 2016 এসপি 1 ) আপনি সাধারণত পাবেন ncharএবং nvarcharবেশী স্থান নিতে charএবং varcharকারণে ইউনিকোড কম্প্রেশন (SCSU অ্যালগরিদম ব্যবহার করে)


17

নিম্নলিখিত বড় পার্থক্য মনে করুন:

  1. এনভারচার ইউনিকোডির ডেটা সঞ্চয় করে। আপনার যদি ইউনিকোড বা বহুভাষিক ডেটা সংরক্ষণ করার প্রয়োজনীয়তা থাকে তবে এনভারচার পছন্দ choice বারচর এএসসিআইআই ডেটা সঞ্চয় করে এবং সাধারণ ব্যবহারের জন্য আপনার ডেটা ধরণের পছন্দ হওয়া উচিত।
  2. মেমরির ব্যবহার সম্পর্কে, এনভারচর চরিত্রের জন্য 2 বাইট ব্যবহার করে, যেখানে বর্ণচর 1 ব্যবহার করে।
  3. এনভিচারচারে একটি ভ্রচারের সাথে যোগ দিন একটি যথেষ্ট পারফরম্যান্স হিট।
  4. ডেটা সন্নিবেশ করার সময় একটি এন উপসর্গের প্রয়োজন হতে পারে: INSERT dbo.t (c) নির্বাচন করুন না '; ʦ ʧ ʨ';
  5. কিছু বিশেষজ্ঞ সর্বদা nvarchar এর পরামর্শ দেয় কারণ: যেহেতু সমস্ত আধুনিক অপারেটিং সিস্টেম এবং বিকাশ প্ল্যাটফর্মগুলি অভ্যন্তরীণভাবে ইউনিকোড ব্যবহার করে, বর্ণের পরিবর্তে এনভারচার ব্যবহার করে, আপনি যখনই ডাটাবেস থেকে পড়বেন বা লিখবেন তখনই এনকোডিং রূপান্তরগুলি এড়াতে পারবেন

0

মোবাইল ডিবি থেকে এসকিউএল সার্ভার ২০০ to-এ আরডিপি মার্জ রেপ্লিকেশনের জন্য এনভরচর প্রয়োজন ছিল। এছাড়াও এলটিআরমি (), আরটিআরএম () এবং ট্রিম () ব্যবহার করা হয়েছিল অনেক বিসি এনভারচার ডেটা এন্ট্রি থেকে স্বয়ংক্রিয়ভাবে () ট্রিম করে না, অন্যদিকে ভারচর ।

সাম্প্রতিক বছরগুলিতে এটি পরিবর্তন হয়েছে কিনা তা আমি সচেতন নই, তবে এনভারচার এখন উত্পন্ন ডাটাবেসে ব্যবহৃত ভিএস প্রো 2017-তে নেট নেট মেম্বারশিপ ওয়েবসাইট লগইনগুলির জন্য ব্যবহৃত আদর্শ।


-3

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

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