PDA

View Full Version : حذف شدن صفر



raika17metal
شنبه 17 مهر 1389, 00:09 صبح
من قصد دارم شماره موبایل رو توی یه فیلد از نوع int ذخیره کنم. اما صفر اولش حذف میشه راه حل چیه؟

AmirAmiri
شنبه 17 مهر 1389, 00:12 صبح
سلام.
توی یک فیلد از نوع nchar ذخیره کن.

raika17metal
شنبه 17 مهر 1389, 00:41 صبح
سلام.
توی یک فیلد از نوع nchar ذخیره کن.
واقعا راه حل بهتری وجود نداره؟
چون میزان حافظه اشغالی برای متغیری که از نوع int و یک متغیر 11 بایتی (11 شماره) قابل گذشت نیست.
درست میگم؟

بهزادصادقی
شنبه 17 مهر 1389, 00:51 صبح
واقعا راه حل بهتری وجود نداره؟
چون فیلد int دو بایت اشغال می کنه اما char به اندازه شماره ها یعنی 11 بایت

مگه شما کمبود جا روی هاردتان دارید؟

در علم پایگاه داده ها، ذخیره کردن داده هایی مثل شماره تلفن در ستون هایی از نوع int یک اشتباه محض به حساب می آید و همه دست اندارکاران و بزرگان این علم پیشنهاد می کنند که از چیزی مثل nvarchar استفاده شود. حقیقت این است که شما احتمالان هرگز شماره های موبایل را با هم جمع و تفریق و ضرب و تقسیم نمی کنید، میانگین شان را نمی گیرید و یا به توان یک عدد دیگر نمی رسانید شان. این داده ها اعداد حقیقی (integer) نیستند، پس دلیل خاصی ندارد که آنها را به صورت اعداد حقیقی ذخیره کرد.

اگر شما نگران کمبود جا هستید، چرا اصلا از SQL Server استفاده می کنید؟ خودتان میتوانید تمام داده هایتان را به صورت binary توی فایلهایی که خودتان طراحی می کنید ذخیره کنید. آن وقت حجم داده هایتان می تواند خیلی خیلی کم باشد.

دلیل استفاده از SQL Server صرفه جویی در تعداد بایت های داده های ما روی هارد هایمان نیست. در شرایطی که با کمبود جا مواجه هستیم، راه های خیلی موثرتری برای ذخیره داده ها وجود دارد. پس اگر مشکل شما کمبود جای داده هایتان است، اصلا به SQL Server نگاه نکنید.

raika17metal
شنبه 17 مهر 1389, 12:16 عصر
مگه شما کمبود جا روی هاردتان دارید؟

در علم پایگاه داده ها، ذخیره کردن داده هایی مثل شماره تلفن در ستون هایی از نوع int یک اشتباه محض به حساب می آید و همه دست اندارکاران و بزرگان این علم پیشنهاد می کنند که از چیزی مثل nvarchar استفاده شود. حقیقت این است که شما احتمالان هرگز شماره های موبایل را با هم جمع و تفریق و ضرب و تقسیم نمی کنید، میانگین شان را نمی گیرید و یا به توان یک عدد دیگر نمی رسانید شان. این داده ها اعداد حقیقی (integer) نیستند، پس دلیل خاصی ندارد که آنها را به صورت اعداد حقیقی ذخیره کرد.

اگر شما نگران کمبود جا هستید، چرا اصلا از SQL Server استفاده می کنید؟ خودتان میتوانید تمام داده هایتان را به صورت binary توی فایلهایی که خودتان طراحی می کنید ذخیره کنید. آن وقت حجم داده هایتان می تواند خیلی خیلی کم باشد.

دلیل استفاده از SQL Server صرفه جویی در تعداد بایت های داده های ما روی هارد هایمان نیست. در شرایطی که با کمبود جا مواجه هستیم، راه های خیلی موثرتری برای ذخیره داده ها وجود دارد. پس اگر مشکل شما کمبود جای داده هایتان است، اصلا به SQL Server نگاه نکنید.
نه من مشکلی از لحاظ هارد ندارم فقط میخواستم از نظر علمی توجیح بشم که توضیحات شما کاملا منطقی و صحیح بود. :لبخندساده:

ASKaffash
شنبه 17 مهر 1389, 14:22 عصر
سلام
همه چیز که فقط هارد نیست به این مثال دقت کنید :
فرض شما یک جدول دارید که شماره موبایل مشتری را ذخیره می کنید و این جدول حدود 100 میلیون رکورد اطلاعاتی دارد حال فرق در ترافیک داده ها روی یک شبکه با پهنای باند اندک است چقدر می شود ؟
حجم اضافه حداقل = 2.4 گیگ

بهزادصادقی
شنبه 17 مهر 1389, 14:29 عصر
سلام
همه چیز که فقط هارد نیست به این مثال دقت کنید :
فرض شما یک جدول دارید که شماره موبایل مشتری را ذخیره می کنید و این جدول حدود 100 میلیون رکورد اطلاعاتی دارد حال فرق در ترافیک داده ها روی یک شبکه با پهنای باند اندک است چقدر می شود ؟
حجم اضافه حداقل = 2.4 گیگ

اگر دوست ما واقعا لازم داشته باشد جندین بار در روز کل شماره های موبایل 100 میلیون آدم را از روی سرور یک شبکه که پهنای باند اندکی دارد را به client یا client هایی منتقل کند، در این صورت بدون شک به مشکل نداشتن پهنای باند کافی بر خواهد خورد.

ASKaffash
شنبه 17 مهر 1389, 14:33 عصر
سلام
فرض کنیم قرار است شرطی جلوی دستور Where باشد که شماره موبایل هائی که در آنها حداقل 3 بار عدد چهار تکرار شده باشد استخراج کند دستور Select برای هر رکورد 12 بایت اضافی دریافت می کند پس 12*n رکورد اضافی دریافت می شود چون nvarchar(10) است

بهزادصادقی
شنبه 17 مهر 1389, 14:41 عصر
سلام
فرض کنیم قرار است شرطی جلوی دستور Where باشد که شماره موبایل هائی که در آنها حداقل 3 بار عدد چهار تکرار شده باشد استخراج کند دستور Select برای هر رکورد 12 بایت اضافی دریافت می کند پس 12*n رکورد اضافی دریافت می شود چون nvarchar(10) است

می خواهید بگویید که شما خودتان شخصا همیشه برای ذخیره سازی شماره تلفن ها از int استفاده می نمائید؟

ASKaffash
شنبه 17 مهر 1389, 14:54 عصر
می خواهید بگویید که شما خودتان شخصا همیشه برای ذخیره سازی شماره تلفن ها از int استفاده می نمائید؟
بله از int ودر شرایطی از Bigint

FastCode
شنبه 17 مهر 1389, 15:48 عصر
بله از int ودر شرایطی از Bigint
فقط bigint.:بامزه:

aghayex
شنبه 17 مهر 1389, 21:32 عصر
دوستان یه سوالی می پرسن که عزیزان هم واقعا روی اون فکر نمی کنن مگه این فیلد تلفن همشون با صفر شروع نمی شن پس اگه با صفر ذخیره بشه یا نشه هیچ تفاوتی نمی کنه فقط موقع لود اطلاعات یه صفر به ابتدای اونها اضافه کنه که این هم کار راحتیه:قهقهه: