বলতে কী বোঝায় nvarchar
?
মধ্যে পার্থক্য কি char
, nchar
, varchar
, এবং nvarchar
SQL সার্ভার কি?
বলতে কী বোঝায় nvarchar
?
মধ্যে পার্থক্য কি char
, nchar
, varchar
, এবং nvarchar
SQL সার্ভার কি?
উত্তর:
কেবল সাফ করার জন্য ... বা সংক্ষেপে ...
nchar
এবং ইউনিকোড অক্ষর nvarchar
সংরক্ষণ করতে পারেন ।char
এবং ইউনিকোড অক্ষর সংরক্ষণ করতে পারে না ।varchar
char
এবং nchar
হয় নির্দিষ্ট দৈর্ঘ্য যা হবে স্টোরেজ স্পেস রিজার্ভ অক্ষরের সংখ্যা জন্য এমনকি আপনি যদি সব কিছু স্থান ব্যবহার করবেন না আপনি উল্লেখ করুন।varchar
এবং nvarchar
হয় পরিবর্তনশীল দৈর্ঘ্যের যা শুধুমাত্র আপনি যে অক্ষরগুলি সংরক্ষণ জন্য স্পেস আপ ব্যবহার করবে। এটি বা মত সংরক্ষণের সংরক্ষণ করবে নাchar
nchar
।nchar
এবং nvarchar
দ্বিগুণ স্টোরেজ স্পেস গ্রহণ করবে, সুতরাং আপনার যদি ইউনিকোড সমর্থন প্রয়োজন হয় তবেই সেগুলি ব্যবহার করা বুদ্ধিমানের কাজ হতে পারে ।
n...
সংস্করণগুলি আমার উত্তরগুলির
এখন পর্যন্ত সমস্ত উত্তর ইঙ্গিত করে যে varchar
একক বাইট, nvarchar
ডাবল বাইট হয়। এর প্রথম অংশটি নীচে চিত্রিত হিসাবে কোলেশন উপর নির্ভর করে ।
DECLARE @T TABLE
(
C1 VARCHAR(20) COLLATE Chinese_Traditional_Stroke_Order_100_CS_AS_KS_WS,
C2 NVARCHAR(20)COLLATE Chinese_Traditional_Stroke_Order_100_CS_AS_KS_WS
)
INSERT INTO @T
VALUES (N'中华人民共和国',N'中华人民共和国'),
(N'abc',N'abc');
SELECT C1,
C2,
LEN(C1) AS [LEN(C1)],
DATALENGTH(C1) AS [DATALENGTH(C1)],
LEN(C2) AS [LEN(C2)],
DATALENGTH(C2) AS [DATALENGTH(C2)]
FROM @T
রিটার্নস
নোট করুন 华
এবং সংস্করণগুলিতে 国
অক্ষরগুলি এখনও উপস্থাপিত হয়নি VARCHAR
এবং নীরবে পরিবর্তিত হয়েছিল ?
।
আসলে এখনও এমন কোনও চীনা অক্ষর নেই যা সেই জোটে একক বাইট দ্বারা পুনরুদ্ধার করা যায়। কেবলমাত্র একক বাইট অক্ষরগুলি সাধারণত পশ্চিমা ASCII সেট।
এই কারণে এটি একটি থেকে একটি সন্নিবেশ জন্য সম্ভব nvarchar(X)
একটি কলাম varchar(X)
কলাম একটি ছাঁটাই ত্রুটি সহ ব্যর্থ (যেখানে এক্স একটি সংখ্যা উভয় স্থানেই একই নির্দেশ)।
এসকিউএল সার্ভার 2012 এসসি (পরিপূরক চরিত্র) যোগ করে যা সমর্থন করে UTF-16
। এই সংগ্রহগুলিতে একটি একক nvarchar
অক্ষর 2 বা 4 বাইট নিতে পারে।
এনচার এবং চরটি একে অপরের মতো ঠিক একইভাবে কাজ করে, যেমন এনভারচর এবং ভারচার। তাদের মধ্যে কেবলমাত্র পার্থক্যটি হ'ল এনচার / এনভারচর ইউনিকোড অক্ষরগুলি সংরক্ষণ করুন (আপনার যদি বর্ধিত অক্ষর সেটগুলির ব্যবহারের প্রয়োজন হয় তবে ভার্চর না করে)।
ইউনিকোড অক্ষরগুলির জন্য আরও স্টোরেজ প্রয়োজন, এনসিআর / এনভারচার ক্ষেত্রগুলি দ্বিগুণ স্থান গ্রহণ করে (সুতরাং উদাহরণস্বরূপ এসকিউএল সার্ভারের পূর্ববর্তী সংস্করণগুলিতে কোনও এনভারচার ক্ষেত্রের সর্বাধিক আকার 4000)।
এই প্রশ্নের অনুরূপ এই এক ।
কেবল আরও কিছু যুক্ত করতে: এনসিএআর - ডেটাতে ট্রেলিং স্পেস যুক্ত করে। এনভারচর - ডেটাতে ট্রেলিং স্পেস যুক্ত করে না।
সুতরাং, আপনি যদি একটি 'এনসিআর' ক্ষেত্রের দ্বারা আপনার ডেটাসেটটি ফিল্টার করতে চলেছেন তবে স্থানগুলি সরাতে আপনি আরটিআরআইএম ব্যবহার করতে চাইতে পারেন। উদাহরণস্বরূপ NChar (10) ক্ষেত্রটি ব্র্যান্ড বলে NIKE শব্দটি সঞ্চয় করে। এটি শব্দের ডানদিকে 6 স্পেস যুক্ত করে। সুতরাং, ফিল্টার করার সময়, অভিব্যক্তিটি পড়তে হবে: আরটিআরআইএম (ক্ষেত্রগুলি! BRAND.Value) = "NIKE"
আশা করি এটি কাউকে সাহায্য করবে কারণ আমি এখনই কিছুটা লড়াই করে যাচ্ছিলাম!
বিদ্যমান উত্তরগুলি সংক্ষিপ্ত করে সংশোধন করার আমার প্রচেষ্টা:
প্রথমে char
এবং nchar
সর্বদা নির্দিষ্ট পরিমাণ স্টোরেজ স্পেস ব্যবহার করবে, এমনকি যখন স্ট্রিং করার স্ট্রিংটি উপলব্ধ জায়গার চেয়ে ছোট হয়, varchar
এবং nvarchar
স্ট্রিংটি সংরক্ষণ করার জন্য প্রয়োজনীয় কেবলমাত্র স্টোরেজ স্পেস ব্যবহার করবে (ওভারহেডের দুটি বাইট, সম্ভবত স্ট্রিং দৈর্ঘ্য সঞ্চয় করতে)। সুতরাং মনে রাখবেন, ভেরিয়েবল স্পেসের মতো "ভার" এর অর্থ "পরিবর্তনশীল"।
দ্বিতীয়টি বোঝার প্রধান বিষয়টি হ'ল, nchar
এবং nvarchar
স্ট্রিংগুলি অক্ষর প্রতি ঠিক দুটি বাইট ব্যবহার করে char
এবং যেখানে storevarchar
কোলেশন কোড পৃষ্ঠা দ্বারা নির্ধারিত একটি এনকোডিং ব্যবহার করুন, যা সাধারণত অক্ষর প্রতি ঠিক এক বাইট হবে (যদিও ব্যতিক্রমগুলি নীচে দেখুন)। চরিত্র প্রতি দুই বাইট ব্যবহার করে, অক্ষরের একটি খুব চওড়া পরিসীমা, সংরক্ষণ করা যেতে পারে তাই এখানে মনে রাখা মৌলিক জিনিস যে nchar
এবং nvarchar
যখন আপনি আন্তর্জাতিকীকরণ সমর্থন, যা আপনি সম্ভবত চান একটি অনেক ভালো পছন্দ হতে থাকে।
কিছু সূক্ষ্ম পয়েন্ট জন্য এখন।
প্রথমে nchar
এবং nvarchar
কলামগুলি সর্বদা ইউসিএস -২ ব্যবহার করে ডেটা সঞ্চয় করে। এর অর্থ হ'ল অক্ষর প্রতি ঠিক দুটি বাইট ব্যবহার করা হবে এবং বেসিক বহুভাষিক সমতল (বিএমপি) এর যে কোনও ইউনিকোড অক্ষর একটি nchar
বা nvarchar
ক্ষেত্রের দ্বারা সংরক্ষণ করা যেতে পারে । তবে, এটি কোনও ক্ষেত্রেই নয় ইউনিকোড অক্ষর সংরক্ষণ করা যায় এমনটি নয়। উদাহরণস্বরূপ, উইকিপিডিয়া অনুসারে, মিশরীয় হায়ারোগ্লাইফসের কোড পয়েন্টগুলি বিএমপির বাইরে পড়ে। সুতরাং, ইউনিকোড স্ট্রিংগুলি ইউটিএফ -8 এবং অন্য সত্যিকারের ইউনিকোড এনকোডিংগুলিতে উপস্থাপন করা যেতে পারে যা এসকিউএল সার্ভার nchar
বা nvarchar
ক্ষেত্রে সংরক্ষণ করা যায় না এবং মিশরীয় হায়ারোগ্লাইফগুলিতে লেখা স্ট্রিংগুলি তাদের মধ্যে থাকবে। ভাগ্যক্রমে আপনার ব্যবহারকারীরা সম্ভবত সেই স্ক্রিপ্টটিতে লিখবেন না, তবে এটি মনে রাখার মতো কিছু!
অন্য পোস্টারগুলি হ'ল আরেকটি বিভ্রান্তিকর তবে আকর্ষণীয় বিষয় char
এবং varchar
কোলেশন কোড পৃষ্ঠাটির প্রয়োজন হলে ক্ষেত্রগুলি নির্দিষ্ট অক্ষরগুলির জন্য অক্ষর প্রতি দুটি বাইট ব্যবহার করতে পারে। (মার্টিন স্মিথ একটি দুর্দান্ত উদাহরণ দিয়েছেন যাতে তিনি দেখায় যে কীভাবে চাইনিজ_ট্রেডিশনাল_স্রোত_আর্ডার_100_CS_AS_KS_WS এই আচরণটি প্রদর্শন করে it এটি দেখুন।)
আপডেট: এসকিউএল সার্ভার ২০১২-এর হিসাবে, অবশেষে ইউটিএফ -১ for এর জন্য কোড পৃষ্ঠা রয়েছে , উদাহরণস্বরূপ লাতিন 1_ জেনারাল_০০_সিআই_এএসএসসি, যা সত্যই পুরো ইউনিকোডের পরিধি আবরণ করতে পারে।
char
: সর্বাধিক 8000 অক্ষরের দৈর্ঘ্য সহ স্থির দৈর্ঘ্যের অক্ষর ডেটা।nchar
: সর্বাধিক 4000 অক্ষরের দৈর্ঘ্য সহ স্থির দৈর্ঘ্যের ইউনিকোড ডেটা।Char
= 8 বিট দৈর্ঘ্যNChar
= 16 বিট দৈর্ঘ্যchar
8-বিট দৈর্ঘ্য থাকতে পারে না। এটি দৈর্ঘ্য সংরক্ষণ করতে হবে না, এবং নির্দিষ্ট দৈর্ঘ্য 8000 অক্ষর পর্যন্ত হতে পারে।
nchar[(n)]
(জাতীয় চরিত্র)
n
স্ট্রিংয়ের দৈর্ঘ্য নির্ধারণ করে এবং এটি 1 থেকে 4,000 এর মধ্যে একটি মান হতে হবে।n
বাইট।nvarchar [(n | max)]
(জাতীয় চরিত্র পরিবর্তিত হয়।)
n
স্ট্রিংয়ের দৈর্ঘ্য নির্ধারণ করে এবং 1 থেকে 4,000 এর মধ্যে মান হতে পারে।max
ইঙ্গিত দেয় যে সর্বাধিক স্টোরেজ আকার 2 ^ 31-1 বাইট (2 গিগাবাইট)।char [(n)]
(চরিত্র)
non-Unicode
স্ট্রিং ডেটা।n
স্ট্রিংয়ের দৈর্ঘ্য নির্ধারণ করে এবং এটি 1 থেকে 8,000 এর মধ্যে একটি মান হতে হবে।n
বাইট হয়।varchar [(n | max)]
(চরিত্রের ভিন্নতা)
n
স্ট্রিংয়ের দৈর্ঘ্য নির্ধারণ করে এবং 1 থেকে 8,000 এর মধ্যে মান হতে পারে।max
ইঙ্গিত দেয় যে সর্বাধিক স্টোরেজ আকার 2 ^ 31-1 বাইট (2 গিগাবাইট)।পার্থক্যগুলি হ'ল:
আর একটি পার্থক্য দৈর্ঘ্য। এনসিআর এবং এনভারচার উভয়ই 4,000 অক্ষর পর্যন্ত দীর্ঘ হতে পারে। এবং চর এবং বর্ণচর 8000 অক্ষর পর্যন্ত দীর্ঘ হতে পারে। তবে এসকিউএল সার্ভারের জন্য আপনি এমন একটি [এন] বার্চার (সর্বোচ্চ) ব্যবহার করতে পারেন যা 2,147,483,648 টি অক্ষর পর্যন্ত পরিচালনা করতে পারে। (দুটি গিগাবাইট, স্বাক্ষরিত 4-বাইট পূর্ণসংখ্যা
nchar nvarchar চেয়ে আরও স্থান প্রয়োজন ।
যেমন,
একটি এনসিআর (100) সর্বদা 100 টি অক্ষর সংরক্ষণ করবে এমনকি আপনি কেবল 5 টি প্রবেশ করলেও বাকী 95 টি অক্ষর শূন্যস্থান দিয়ে প্যাড করা হবে। একটি nvarchar (100) এ 5 টি অক্ষর সংরক্ষণ করলে 5 টি অক্ষর সাশ্রয় হবে।
এনসিআর (10) দৈর্ঘ্যের একটি নির্দিষ্ট দৈর্ঘ্যের ইউনিকোড স্ট্রিং n দৈর্ঘ্য যদি পৃথক হয়।
এনসিআর নির্দিষ্ট দৈর্ঘ্যের এবং ইউনিকোড অক্ষর ধারণ করতে পারে। এটিতে প্রতিটি চরিত্রের দুটি বাইট স্টোরেজ ব্যবহার করা হয়।
ভার্চার পরিবর্তনশীল দৈর্ঘ্যের এবং ইউনিকোড অক্ষর ধারণ করতে পারে না। এটি প্রতি অক্ষরে একটি বাইট স্টোরেজ ব্যবহার করে।
UCS-2
(যা SQL সার্ভার দ্বারা ব্যবহৃত এনকোডিং হতে হবে) প্রতিটি অক্ষর সঞ্চয় করে ঠিক দুই বাইট, দেখতে msdn.microsoft.com/en-us/library/bb330962%28v=sql.90%29.aspx : SQL Server stores Unicode in the UCS-2 encoding scheme... UCS-2 is a fixed-length encoding that represents all characters as a 16-bit value (2 bytes)
। এসকিউএল সার্ভার 2008 SCSU কম্প্রেশন ব্যবহার করতে পারেন, কিন্তু এখনও UCS-2 এনকোড ইউনিকোড স্ট্রিং কম্প্রেশন হল: msdn.microsoft.com/en-us/library/ee240835.aspx
এনভিচারার ইউনিকোড অক্ষর সংরক্ষণ করতে পারে এবং প্রতিটি চরিত্রের জন্য 2 বাইট নেয়।
nvarchar
সর্বদা অক্ষরে 2 বাইট লাগে।