دیتا تایپ های SQL Server 2022
در این مقاله قصد داریم به معرفی انواع دیتا تایپ های موجود در SQL Server بر اساس آخرین آرتیکل موجود در وبسایت مایکروسافت بپردازیم ، همانطور که می دانید DataType یکی از مهم ترین اجزای اصلی در طراحی دیتابیس و چرخه نگهداری و حیات دیتابیس می باشد ، قطعا اطلاع دارید انتخاب دیتا تایپ اشتباه و نادرست تا چه حد می تواند بر روی پرفورمنس دیتابیس تاثیر منفی بگذارد ، در بسیاری از موارد مشاهده شده که در ابتدای راه طراحی انتخاب هر گونه دیتا تایپی بدون تحمیل هزینه های آتی انجام می شود ، ولی بعد از گذشت مدتی و بعد از حجیم شدن دیتابیس و پر شدن جداول مقداری کندی جداول را در هنگام Conversion کردن دیتا در هنگام جابجایی و بازیابی دیتا مشاهده کرد ، با انتخاب دیتا تایپ مناسب می توان این کندی ها را در ابتدای کار برطرف کرد . معمولا برنامه نویسان مبتدی برای راحتی کار و یا از روی دانش کم اکثر فیلد های خود را MAX انتخاب کرده که در طراحی بسیار اقدام اشتباهی می باشد .
در ادامه به انواع دیتا تایپ های مختلف SQL Server می پردازیم . در وبسایت مایکروسافت دسته بندی دیتا تایپ های SQL Server به شکل زیر می باشد :
Exact numerics
Unicode character strings
Approximate numerics
Binary String
Data and Time
Other Data Type
Character String
دسته بندی دیتا تایپ های Exact numerics شامل موارد زیر می شود :
دیتا تایپ Bigint ، INT ، Tinyint و Smallint
این نوع داده برای بسیاری از تعاریف و مقادیر داده ای و آبجکت های موجود در طراحی نرم افزار کافی می باشد ، مثلا فیلد های ID ، NationalCode ، MilitaryStatus و یا موارد مشابه آن ، مثلا دیتا تایپ Tinyint برای فیلد سن افراد کافی می باشد زیرا طول این فیلد 255 کاراکتر می باشد ولی سن افراد قطعا بیشتر از 255 سال نخواهد شد . در دیتا تایپ های عدد صحیح اصلی ترین دیتا تایپ INT می باشد . در بعضی مواقع طول رسته عددی شما ممکن است از INT بزرگتر شود که در اسن صورت می توانید از دیتا تایپ Bigint استفاده کنید ، طول این دیتا تایپ بین INT و SmallMoney می باشد . در جدول زیر Range عددی این 4 دیتا تایپ عدد صحیح را به همراه میزان فضای مورد نیاز برای ذخیره سازی را مشاهده می کنید .
Data type | Range | Storage |
bigint | -2^63 (-9,223,372,036,854,775,808) to 2^63-1 (9,223,372,036,854,775,807) | 8 Bytes |
int | -2^31 (-2,147,483,648) to 2^31-1 (2,147,483,647) | 4 Bytes |
smallint | -2^15 (-32,768) to 2^15-1 (32,767) | 2 Bytes |
tinyint | 0 to 255 | 1 Byte |
اگر دیتای عدد صحیح شما مقداری از طول رشته Int (2,147,483,647) بزرگتر بود نیازی به استفاده از دیتا تایپ Bigint نبوده و بهتر است از دیتا تایپ Decimal استفاده کنید . برای مطالعه بیشتر در مورد دیتا تایپ INT می توانید به لینک زیر مراجعه کنید .
دیتا تایپ Decimal and Numeric
این نوع دیتا تایپ برای نوع داده های اعشاری و ممیزی استفاده می شود و باید همه ی داده های اعشاری با ممیز ذخیره شوند .
محدوده طول رشته این تایپ دیتا بین 1-38^10- تا 1-38^10 را در بر می گیرد و هم نقطه اعشار سمت چپ و هم سمت راست را شامل می شود . دقت اعشار این نوع داده بین 1 تا 38 می باشد که مقدار پیش فرض آن 18 می باشد . میزان فضای مورد استفاده برای ذخیره سازی این نوع داده برای دقت اعشار 1 تا 9 رقم مقدار 5 بایت ، برای دقت اعشار 10 تا 19رقم مقدار 9 بایت ، برای دقت اعشار 20 تا 28 رقم مقدار 13 بایت ، برای دقت اعشار 29 تا 38 رقم مقدار 17 بایت می باشد .
دیتا تایپ Bit
این دیتا تایپ فقط مقادیر 0 یا 1 را شامل می شود و برای مواردی مثل صحیح و غلط و یا بله و خیر Y and N مورد استفاده قرار میگیرد و همچنین امکان اینکه Nullable هم باشد را دارد . فضای مورد نیاز آن 1 بایت می باشد .
دیتا تایپ money and smallmoney
این دیتا تایپ برای ذخیره واحد های پولی مورد استفاده قرار میگیرد و در پروژه های مالی و حسابداری بسیار پرکاربرد می باشد . دیتا تایپ Money به 8 بایت برای ذخیره سازی نیاز داشته و SmallMoney به 4 بایت نیاز دارد. رنج عددی دیتا تایپ Money بین -922,337,203,685,477.5808 و 922,337,203,685,477.5807 می باشد . و رنج عددی دیتا تایپ SmallMoney بین 214,748.3648- تا 214,748.3647 می باشد . در نظر داشته باشید که این دیتا تایپ برای واحد پولی ریال کاربردی به آن صورت ندارد.
دسته بندی دیتا تایپ های Approximate numerics شامل موارد زیر می شود :
-
دیتا تایپ Real و Float
این دو دیتا تایپ زمانی مورد استفاده قرار میگیرد که اعداد با ممیز شناور متغییر دارند مثل داده های ریاضی آماری یا نماد های علمی .
در دیتا تایپ (n)Float مقدار n مقداری است که تعیین میکنیم داده ی ما چه ارزشی را قرار است ذخیره کند که این مقدار باید بین 1 تا 53 باشد و اگر این مقدار را مشخص نکنیم پیش فرض آن عدد 53 می باشد . فضای ذخیر سازی این دیتا تایپ حداکثر 8 بایت می باشد ولی طبق اعلام مایکروسافت اگر مقدار n را که دقت عدد ما می باشد بین 1 الی 24 بگذارید فضای مورد نیاز دیتا تایپ 4 بایت بوده ولی اگر بالاتر از 24 تا 53 بگذارید مقدار فضای مورد استفاده این دیتا تایپ 8 باید می باشد .
n value | Precision | Storage size |
---|---|---|
1-24 | 7 digits | 4 bytes |
25-53 | 15 digits | 8 bytes |
رنج عددی قابل ذخیره در این دیتا تایپ حداکثر از منفی 1.79E+308 تا مثبت 1.79E+308 می باشد .
نوع داده ای Real مترادف Float بوده و با دقت 38 رقم می باشد ، فضای مورد نیاز برای ذخیره سازی این دیتا تایپ 4 بایت بوده و رنج عددی قابل ذخیره در آن از منفی 3.40E + 38 تا مثبت 3.40E + 38 می باشد .
دسته بندی دیتا تایپ های Date and time
دیتا تایپ Date
این دیتاتایپ برای ذخیره تاریخ مورد استفاده قرار می گیرد و از 3 بایت Fixed برای ذخیره سازی استفاده می کند ، تاریخ پیش فرض درون این دیتا تایپ بر اساس گفته مایکروسافت 1900-01-01 بوده و تقویم پیش فرض آن Gregorian است . برای قسمت سال یا YYYY از 0001-01-01 تا 9999-12-31 استفاده میکند ، برای ماه از 01 الی 12 و برای روز از 01 تا 31 استفاده می کند .
این دیتا تایپ جزئیات بسیار زیادی در مورد فرمت های تاریخ داشته که از حوصله این مقاله خارج می باشد برای مشاهده جزئیات بیشتر به لینک زیر مراجعه کنید .
دیتا تایپ DateTime
این دیتاتایپ حجم 8 بایت برای ذخیره سازی نیاز داشته و همانطور که از اسمش پیداست برای ذخیره سازی دیتا های تاریخ و ساعت باهم می باشد . رنج تاریخ مورد پذیرش توسط این دیتا تایپ از 1 ژانویه 1753 الی 31 دسامبر 9999 می باشد . و رنج ساعت مورد پذیرش از 00:00:00 الی 23:59:59.997 می باشد . جزئیات دقیق این دیتاتایپ در لینک زیر قابل مشاهده است .
دیتا تایپ SmallDateTime
این دیتاتایپ از ازه تاریخی کمتری پشتیبانی کرده و به همین علت به حجم کمتری برای ذخیره سازی نیازمند است ، فضای مورد استفاده ایت دیتاتایپ 4 باید است .و از رنج تاریخی 1-1-1900 الی 31-12-2079 پشتیبانی می کند .
-
دیتا تایپ Time
این دیتاتایپ از 5 بایت به صورت فیکس پشتیبانی کرده و برای ذخیره مقادیر زمانی و ساعت مورد ساتفاده است . رنج پذیرش آن از 00:00:00.0000000 تا 23:59:59.9999999 می باشد .
-
دسته بندی دیتا تایپ های String and Binary
-
binary and varbinary
دیتا تایپ binary به صورت [ ( n ) ] و دیتا تایپ Varbinary به صورت [ ( n | max ) ] ارائه شده که که این n در واقع تعیین کننده طول مقدار این دیتا تایپ بوده که بین 1 تا 8000 متغییر می باشد .
-
char and varchar
دیتا تایپ CHAR با مشخصه n که مانند دیتا تایپ قبلی تعیین کننده طول رشته می باشد و از 1 تا 8000 بوده و n بایت فضا اشغال می کند.
دیتا تایپ VarChar این دیتا تایپ نیز مانده قبلی ولی سایز ذخیره سازی آن هر مقدار باشد در انتها بعلاوه 2 بایت می شود و حداکثر تا 2 گیگابایت فضای ذخیره سازی نیاز دارد .
این دو دیتا تایپ-
دسته بندی دیتا تایپ های Unicode Character Strings
دیتا تایپ NCHAR که از نوع یونیکد بوده که کد اسکی یکتا داشته و برای زبان های غیر انگلیسی مثل فارسی بسیار مناسب می باشد ، این دیتاتایپ به ازای هر کاراکتر 2 بایت فضا اشغال می کندو مقداری بین 1 تا 4000 را می تواند بگیرد .
دیتا تایپ NVARCHAR نیز مانند NCHAR شرایط مشابهی داشته ولی در انتها به ازای هر رشته ای که ذخیره می کند 2 بایت اضافه تر اشغال می کند .
دیتا تایپ های دیگری نیز وجود داشته که کمتر توسط برنامه نویسان مورد استفاده قرار میگیرد که برای مشاهده جزئیات و لیست آنها می توانید به لینک زیر مراجعه کنید .
مثل دیتا تایپ های hierarchyid data ، Spatial Types – geography ، XML ، OGC Methods on Geometry و ….
در ادامه خلاصه ای از مهم ترین دیتاتایپ های sql server را مشاهده می کنید .
در Microsoft SQL Server، دادهها را میتوان با استفاده از انواع دادههای مختلف ذخیره کرد. در زیر، برخی از انواع دادههای رایج در SQL Server را بررسی میکنیم:
1. نوع اعداد صحیح (Integer Types):
– `int`: برای ذخیره اعداد صحیح در بازهی -2,147,483,648 تا 2,147,483,647.
– `bigint`: برای ذخیره اعداد صحیح بزرگتر در بازهی -9,223,372,036,854,775,808 تا 9,223,372,036,854,775,807.
– `smallint`: برای ذخیره اعداد صحیح در بازهی -32,768 تا 32,767.
– `tinyint`: برای ذخیره اعداد صحیح در بازهی 0 تا 255.
2. نوع اعداد حقیقی (Floating-Point Types):
– `float(n)`: برای ذخیره اعداد حقیقی با پرسیژن پویا. مقدار n برابر با تعداد بیتهای مجموعهی مقدار میباشد (24، 53 و …).
– `real`: برای ذخیره اعداد حقیقی با پرسیژن ثابت.
3. نوع رشته (String Types):
– `varchar(n)`: برای ذخیره رشتهها با طول متغیر تا حداکثر n کاراکتر.
– `nvarchar(n)`: برای ذخیره رشتهها با طول متغیر تا حداکثر n کاراکتر در قالب یونیکد.
– `char(n)`: برای ذخیره رشتهها با طول ثابت n کاراکتر.
– `nchar(n)`: برای ذخیره رشتهها با طول ثابت n کاراکتر در قالب یونیکد.
– `text`: برای ذخیره رشتههای بزرگتر با طول متغیر.
4. نوع تاریخ و زمان (Date and Time Types) (ادامه):
– `datetime2`: برای ذخیره تاریخ و زمان با دقت تا نانوثانیه.
– `datetimeoffset`: برای ذخیره تاریخ و زمان با دقت تا میلیثانیه و محاسبه محلی.
– `time`: برای ذخیره زمان بدون تاریخ.
5. نوع بولی (Boolean Types):
– `bit`: برای ذخیره مقادیر منطقی، مانند `true` یا `false`.
6. نوع پول (Money Types):
– `money`: برای ذخیره مقادیر پولی با دقت تا 4 رقم اعشار.
– `smallmoney`: برای ذخیره مقادیر پولی با دقت تا 2 رقم اعشار.
7. نوع دودویی (Binary Types):
– `binary(n)`: برای ذخیره دادههای دودویی با طول ثابت n بایت.
– `varbinary(n)`: برای ذخیره دادههای دودویی با طول متغیر تا حداکثر n بایت.
– `image`: برای ذخیره دادههای دودویی بزرگتر با طول متغیر.
8. نوع جدول (Table Types):
– `table`: برای تعریف نوع دادهای سفارشی که به عنوان پارامتر در فرآیندهای ذخیرهسازی شده استفاده میشود.
9. نوع نال (Null Type):
– `null`: برای ذخیره مقدار نال یا تهی.
10. نوع تصویر (Image Type):
– `image`: برای ذخیره تصاویر بزرگتر، فایلهای صوتی و ویدیویی و دادههای دودویی بزرگتر.
11. نوع جدید (New Types) (معرفی شده در SQL Server 2008):
– `geography`: برای ذخیره دادههای مکانی مانند نقاط مختصات جغرافیایی و مختصات جغرافیایی.
– `geometry`: برای ذخیره دادههای هندسی مانند نقاط، خطوط و شکلها.
12. نوع جدول (Table Type):
– `table`: برای تعریف نوع دادهای جدولی که به عنوان پارامتر در فرآیندهای ذخیرهسازی شده یا جداول موقت استفاده میشود.
13. نوع XML:
– `xml`: برای ذخیره دادههای XML به صورت متنی.
14. نوع مجموعه (Set Type):
– `nvarchar(max)`: برای ذخیره رشتهها با طول متغیر بسیار بزرگ.
– `varbinary(max)`: برای ذخیره دادههای دودویی با طول متغیر بسیار بزرگ.
این فهرست تنها برخی از نوعهای دادههای متداول در SQL Server است، وجود دیگر نوعها و ترکیبات نیز امکانپذیر است. همچنین، نسخههای مختلف SQL Server ممکن است دارای برخی از نوعهای خاص و توسعهیافتهتر باشند.
دیدگاه ها 2