View Full Version : حجم اشغالی فیلد
morika
پنج شنبه 03 مرداد 1392, 13:25 عصر
سلام
یه سوالی برای من پیش اومده بود که هرکاری کردم جوابش رو پیدا نکردم می خواستم ببینم دوستان کسی می دونه که وقتی ما یه فیلد رو از نوع nvarchar(50) قرار می دیم حجمش با زمانی که اون nvarechar(20) قرار می دیم فرق می کنه یا نه؟
یعنی منظورم اینه که وقتی ای فیلد تعریف میشه به مقداری که درخواست شده فضا رزرو می کنه براش یا هیچ فضایی از پیش براش تعین نمیشه و فقط در زمان مقدار دادن به فیلد هست که به اندازه داده فضا بهش اختصاص می ده؟
ممنون
araelectronic@ymail.com
پنج شنبه 03 مرداد 1392, 15:51 عصر
با سلام
هر جدول که طراحی میشه یکسری اطلاعات مربوط به اون جدول در فایل دیتابیس ذخیره میشه که یکی از اونها حجم هر فیلد از دیتابیس هست. ولی این موضوع که nvch50 به nvch20 تغییر کند در حجم فایل تاثیری نداره فقط در صورت تغییر جدول یکسری اطلاعات log ذخیره میشه که باعث افزایش حجم فایل log خواهند شد.
محمد سلیم آبادی
جمعه 04 مرداد 1392, 01:38 صبح
سلام
زمانی که data type شما از نوع var (به معنای متغیر/ variable) باشه تنها به اندازه ای که داده وارد کردین فضا اشغال میشه. و مقداری را که برای طول آن در نظر گرفتین برای تعیین سقف کاراکترهایی است که وارد میشن این کار بیشتر به منظور ایجاد یک نوع قید است. فرض کنید می خواهید شرطی را لحاظ کنید تا نام خانوادگی هایی وارد بشوند که متعارف اند. یک نام خانوادگی 500 حرفی قطعا یک نام متعارف نیست.
از طرفی اگر نوع داده شما از نوع ثابت باشد SQL Server به اندازه طول آن data type فضای دیسک را اشغال میکند و کاری به تعداد کاراکتر هایی که وارد شده است ندارد، و فضای باقیمانده را با کاراکتر space پر می کند.
در مثال زیر سه متغیر تعریف و مقدار دهی شده اند. و توسط تابع DATALENGTH فضای اشغال شده مشخص شده است
declare @varchar_20 varchar(20), @varchar_50 varchar(50), @fix_length char(20)
select @varchar_20 = '12345', @varchar_50 = '123', @fix_length = '1'
select DATALENGTH(@varchar_20) as varchar_20,
DATALENGTH(@varchar_50) as varchar_50,
DATALENGTH(@fix_length) as char_20
/*
varchar_20 varchar_50 char_20
----------- ----------- -----------
5 3 20
*/
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.