انواع داده در Microsoft SQL Server – بخش اول

بحث نوع داده در SQL Server به مانند تمامی پایگاه های داده و زبان های برنامه نویسی بحثی مهم و کلیدی است. درSQL Server تمامی فیلدها، متغیرها و پارامترها دارای یک نوع داده می باشند.
اما چرا نوع داده مهم است؟ نوع داده مشخص می کند که هر فیلد، متغیر یا پارامتری، چه مقادیری را می تواند در خود نگهداری کند، چه بازه ای از آن نوع داده را با چه دقتی پوشش می دهد و چه میزان فضا را به خود اختصاص می دهد.
انواع داده در SQL Server به طور کلی در دسته بندی زیر قرار می گیرد:
- اعداد دقیق
- اعداد صحیح
- اعداد اعشاری
- اعداد ارزی
- اعداد باینری
- اعداد تقریبی
- کاراکتری
- غیر یونیکد
- یونیکد
- تاریخی
- رشته های باینری
همچنین برخی از انواع داده فضای بسیار زیادی را به خود اختصاص می دهند. بر همین اساس دو گروه از انواع داده را نیز داریم که به شرح زیر می باشند:
- مقادیر بزرگ
- اشیا بزرگ
در این سری مقالات به شرح انواع داده خواهیم پرداخت:
قسمت اول: انواع داده عددی
اعداد صحیح

در SQL Server، کوچکترین واحد نگهداری اطلاعات بایت (byte) است. هر بایت از 8 بیت تشکیل شده که تنها می توانند مقادیر 0 یا 1 را به خود اختصاص بدهند.

پس یک بایت می تواند بازه ای از اعداد (00000000) تا (11111111) را در مبنای 2 پوشش بدهد. یعنی اعداد بین 0 تا 255 در مبنای دهدی. SQL Server نام این نوع داده را tinyint گذاشته است.
اگر به جای یک بایت از دو بایت استفاده کنیم چه می شود؟ دو بایت یعنی 16 بیت. بنابراین به 2^16 حالت مختلف می توان، صفر ها و یک ها را در کنار هم قرار داد. SQL Server برای اینکه بتواند اعداد منفی را هم پوشش بدهد یک بیت را به علامت و 15 بیت را به اعداد اختصاص می دهد. بنابراین بازه عددی زیر را می توان پوشش داد:
– (2^15) ~ (2^15) -1

نام این نوع داده smallint می باشد.
بر همین اساس می توانیم دیگر اعضای خانواده نوع داده عدد صحیح را بررسی کنیم:

اگر عدد استفاده شده با هر یک از این انواع داده، خارج از بازه مشخص شده باشد؛ با خطای arithmetic overflow مواجه می شویم.
اعداد اعشاری:

از دو نوع داده ای decimal(p, s) و numeric(p, s) برای نگهداری اعداد اعشاری استفاده می شود. این دو نوع داده مترادف یکدیگر هستند و می توان از هر یک به جای دیگری استفاده کرد.
- پارامتر p بیانگر تعداد رقم هایی است که یک عدد اعشاری می تواند در خود جای دهد. منظور جمع تعداد رقم های دو طرف اعشار می باشد.
- پارامتر p به طور پیش فرض برابر 18 می باشد.
- مقدار p می تواند در بازه ی (0 <= p <= 38) قرار بگیرد.
- پارامتر s نشان دهنده حداکثر تعداد رقم اعشاری است که می توانیم داشته باشیم.
- s به طور پیش فرض برابر 0 می باشد.
- مقدار s می تواند در بازه ی (0 <= s <= p) قرار بگیرد.
فضای ذخیره این دو نوع داده بستگی به اندازه p دارد و به صورت پلکانی و طبق جدول زیر مشخص می شود:

اگر قسمت صحیح عدد استفاده شده با هر یک از این انواع داده، بزرگتر از p باشد؛ با خطای arithmetic overflow مواجه می شویم. ولی اگر قسمت اعشاری آن بزرگتر از s باشد؛ تعداد رقم اعشاری به s محدود می شود و عدد به سمت پایین گرد می شود.
برای درک بهتر به مثال زیر توجه کنید:

اعداد ارزی:

دقت اعداد ارزی تا 4 رقم اعشار می باشد.
اعداد باینری:

نوع داده bit تنها عضو این خانواده است. bit یک عدد صحیح است و مقادیر آن می تواند 0 یا 1 یا NULL باشد. اگر در یک جدول تعداد ستون های نوع bit کمتر یا مساوی 8 باشد، ستون ها در قالب یک byte نگهداری می شوند. اگر تعداد این ستون ها بین 9 تا 16 عدد باشد، از 2 byte فضا استفاده می شود و …
اعداد تقریبی

یکی از روش های نمایش اعداد، استفاده از فرمت ممیز شناور می باشد. در این روش هر عدد (n) به صورت
m × be نمایش داده می شود:
- عدد n = number
- مانتیس یا ارقام معنی دار m = mantissa
- پایه b = base
- توانe = exponent
پایه توان معمولا یکی از اعداد 2، 10 یا 16 می باشد. در طی سالها روشهای گوناگونی از نمایش ممیز شناور در رایانهها استفاده شدهاست. نماد علمی یکی از این روش هاست که پایه توان (b) را 10 در نظر می گیرد. از دهه ی ۱۹۹۰ میلادی به بعد، نمایش معمول بر اساس استاندارد IEEE 754 تعیین میشود که منطبق بر نماد علمی می باشد. در این نماد برای راحتی نمایش از e یا E به جای “ضربدر 10 به توان ِ” استفاده می کنند.

در ادامه مثال هایی از این استاندارد را مشاهده می کنید:

در SQL Server دو نوع داده (float(n و real از روش نماد علمی برای ذخیره سازی اعداد استفاده می کند.
- پارامتر n اختیاری است و مشخص کننده تعداد بیت هایی است که برای ذخیره سازی ارقام مانتیس استفاده می شود.
- پارامتر n عددی بین 1 تا 53 می باشد که اگر مشخص نشود، 53 در نظر گرفته می شود.
- نوع داده real مترادف (float(24 هست.

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