
প্রতিটি ইঞ্জিনিয়ার নতুন স্ট্রিং কলাম সংজ্ঞায়িত করার সময় সিদ্ধান্ত নেন: আমি কি nvarchar
ব্যবহার করব নাকি varchar ব্যবহার করব?
যখন থেকে আমি nvarchar
আবিষ্কার করেছি, তখন থেকেই আমি সবসময় nvarchar
ব্যবহার করি। আমার চিন্তা হল, কেন এমন একটি ডেটাটাইপ ব্যবহার করব যা হয়তো টেক্সট ভ্যালু সাপোর্ট করবে না, এবং আপনি সম্ভবত প্রোডাকশনে না যাওয়া পর্যন্ত কোনো অসামঞ্জস্যপূর্ণ ভ্যালু আবিষ্কার করবেন না।
আমি স্পেস নিয়ে যুক্তি শুনি, কিন্তু স্পেস সস্তা এবং এটা নিয়ে চিন্তা করার মতো নয়। আমি জানি আপনি কী ভাবছেন, হার্ড ড্রাইভ ভর্তি হয়ে গেলে খরচ কোনো ব্যাপার না, এবং আমি একমত।
Sql Server 2008 R2 থেকে শুরু করে nchar
এবং nvarchar
(nvarchar(max)
বাদ দিয়ে) ফিল্ডগুলিতে ডেটা কম্প্রেশন প্রয়োগ করা হয়। ডেটার উপর নির্ভর করে কম্প্রেশনের কার্যকারিতা ভিন্ন হয়, কিন্তু ইংরেজির ক্ষেত্রে ৫০% কম্প্রেশন হয়, যা এটিকে varchar
-এর স্পেসের প্রয়োজনের সমান করে তোলে (১)।
আরেকটি বিষয় বিবেচনা করার মতো হল বেশিরভাগ প্রোগ্রামিং ভাষা UTF-16 কে স্ট্রিং টাইপ হিসেবে সাপোর্ট করে। তাই প্রতিবার যখন একটি varchar
ডেটাবেস থেকে লোড হয়, এটি UTF-16 (nvarchar
-এর মতো) এ রূপান্তরিত হয়।
এই StackOverflow উত্তরটি nvarchar
বনাম varchar
এর সারসংক্ষেপ দেয়:
একটি nvarchar কলাম যেকোনো Unicode ডেটা সংরক্ষণ করতে পারে। একটি varchar কলাম ৮-বিট কোডপেজে সীমাবদ্ধ। কিছু লোক মনে করে যে varchar ব্যবহার করা উচিত কারণ এটি কম জায়গা নেয়। আমি বিশ্বাস করি এটি সঠিক উত্তর নয়। কোডপেজ অসামঞ্জস্যতা একটি যন্ত্রণা, এবং Unicode হল কোডপেজ সমস্যার নিরাময়। আজকাল সস্তা ডিস্ক এবং মেমরির সাথে, কোড পেজ নিয়ে ঝামেলায় সময় নষ্ট করার সত্যিই কোনো কারণ নেই।
সমস্ত আধুনিক অপারেটিং সিস্টেম এবং ডেভেলপমেন্ট প্ল্যাটফর্ম অভ্যন্তরীণভাবে Unicode ব্যবহার করে। varchar এর পরিবর্তে nvarchar ব্যবহার করে, আপনি প্রতিবার ডেটাবেস থেকে পড়া বা লেখার সময় এনকোডিং রূপান্তর এড়াতে পারেন। রূপান্তর সময় নেয়, এবং ত্রুটির প্রবণ। এবং রূপান্তর ত্রুটি থেকে পুনরুদ্ধার একটি অ-তুচ্ছ সমস্যা।
যদি আপনি এমন একটি অ্যাপ্লিকেশনের সাথে ইন্টারফেস করছেন যা শুধুমাত্র ASCII ব্যবহার করে, তবুও আমি ডেটাবেসে Unicode ব্যবহার করার সুপারিশ করব। OS এবং ডেটাবেস কোলেশন অ্যালগরিদম Unicode এর সাথে ভাল কাজ করবে। Unicode অন্যান্য সিস্টেমের সাথে ইন্টারফেস করার সময় রূপান্তর সমস্যা এড়ায়। এবং আপনি ভবিষ্যতের জন্য প্রস্তুতি নিচ্ছেন। এবং আপনি সবসময় যাচাই করতে পারেন যে আপনার ডেটা যেকোনো লিগেসি সিস্টেমের জন্য ৭-বিট ASCII তে সীমাবদ্ধ যা আপনাকে বজায় রাখতে হচ্ছে, এমনকি সম্পূর্ণ Unicode স্টোরেজের কিছু সুবিধা উপভোগ করার সময়ও। (২)
আমার উপসংহার হল একমাত্র সময় যখন ডেটা varchar হয় তা হল যখন এটি বিশ্রামে থাকে।
রেফারেন্স:
১. Unicode Compression implementation
২. What is the difference between varchar and nvarchar?
লেখক: চাক কনওয়ে সফটওয়্যার ইঞ্জিনিয়ারিং এবং জেনারেটিভ এআই-তে বিশেষজ্ঞ। তার সাথে সোশ্যাল মিডিয়ায় যোগাযোগ করুন: X (@chuckconway) অথবা তাকে YouTube-এ দেখুন।