انواع رشته کاراکتر در SQL Server 2008

برای ذخیره رشته ای از کاراکترها در MS SQL Server 2008  چند انتخاب مختلف برای نوع فیلد داریم:
char - nchar- varchar - nvarchar - text - ntext
ممکن است در ابتدا تفاوت آنها موجب سردرگمی شود. در اینجا قصد داریم به طور خلاصه به تفاوت های آنها اشاره کنیم.


تفاوت این انواع با توجه به نامگذاری آنها مشخص می شود. در نام گذاری این انواع n به معنی uNicode و var به معنی VARiable-length است. یعنی آنهایی که n دارند از یونیکد پشتیبانی میکنند و آنهایی که var دارند طول متغیری دارند و متناسب با اندازه داده فضای ذخیره سازی اختصاص می دهند. در موقع ساخت یک فیلد از انواع بالا ( به جز text  ) اگر نوع فیلد var نداشته باشد، شما در کادر length فیلد دقیقا تعداد خانه ها ( 2 بایت برای هر کاراکتر اگر نوع n دار باشد و 1 باید برای بی n ها ) فضا رزرو میکنید و برای var دارها این مقدار حداکثر فضای ذخیره سازی را تعیین می کند که با توجه به طول رشته، فضای ذخیره سازی میتواند تا آن مقدار افزایش یابد.
اما نوع text و ntext شبیه nvarchar و varchar است. با این تفاوت که حداکثر طول ممکن برای ntext و text بیشتر است.

پس به طور دقیق تر:
1- char : طول ثابت - حداکثر 8000 کاراکتر - هر کارکتر یک بایت
2- nchar : طول ثابت - حداکثر 4000 کاراکتر - هر کارکتر دو بایت
3- varchar : طول متغیر - حداکثر 8000 کاراکتر - هر کارکتر یک بایت
4- nvarchar : طول متغیر - حداکثر 4000 کاراکتر - هر کارکتر دو بایت
5- text : طول متغیر- حداکثر (2,147,483,647 کاراکتر - هر کارکتر یک بایت
6- ntext : طول متغیر- حداکثر 1,073,741,823 کاراکتر - هر کارکتر دو بایت

نکته: انواع Xchar ها از نوع in-row و انواع Xtext از نوع in-page هستند و در رکورد فقط اشاره گری به page حاوی اطلاعات واقعی ذخیره میشود.

نکته: اگر از انواع ب طول متغیر استفاده می کنید می توانید به جای وارد کردن عددی به عنوان length از max استفاده کنید. در این صورت در حالت عادی max برابر 4000 ( یا 8000 برای غیر یونیکید ) خواهید بود و تا وقتی طول داده از این مقدار کمتر است، به صورت in-row ذخیره میشود و در حالتی که از این مرز تجاوز کنید به صورت in-page ذخیره میشود و طول آن تا حداکثر طول ntext ( یا text برای غیر یونیکدی ) قابل افزایش است.
پس به کمک max تا وقتی طول از مرز 4000 ( یا 8000 ) عبور نکرده مانند Xvarchar رقتار میکند و با عبور از این مرز به صورت Xtext رفتار خواهد کرد.

نکته: شاید استفاده از text به خاطر ظرفیت بالایش خوب به نظر برسد ولی سربار حاصل از مدیریت این حجم بالا همیشه به صرفه نیست. پس اول نیازهای خود را بررسی کنید.