انواع داده ها در زبان SQL

23 فروردین 1398
درسنامه درس 28 از سری آموزش زبان SQL
SQL-datatypes

با سلام و عرض خسته نباشید خدمت شما همراهان روکسو! به شما تبریک می گویم که تا این قسمت، یعنی قسمت آخر آموزش زبان SQL، همراه ما بوده اید. در این قسمت می خواهیم در مورد انواع داده (datatype) در زبان SQL صحبت کنیم. در طی این دوره چندین بار به datatype ها اشاره کرده ایم و به شما قول داده ایم که آن ها را در یک قسمت جداگانه معرفی خواهیم کرد. این قسمت همان قسمت است!

datatype (انواع داده) در زبان SQL

به نظر شما Datatype یک ستون در یک جدول چه کاری انجام می دهد؟ datatype های یک ستون، تعیین می کنند که آن ستون می تواند چه نوع مقادیری را در خود ذخیره کند؛ به طور مثال آیا می تواند مقادیر عددی بگیرد؟ آیا می تواند مقادیر حروفی بگیرد؟ آگر مقادیر عددی قبول می کند آیا فقط اعداد صحیح را قبول می کند و یا اعداد اعشاری را نیز می گیرد؟ و صد ها سوال دیگر ... .

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

  • نام ستون
  • datatype یا نوع داده ی آن

شما به عنوان توسعه دهنده وظیفه دارید هنگام ساخت یک جدول برای پایگاه داده، نوع داده ی تک تک ستون هایش را مشخص کنید یا بهتر بگویم بدون تعیین datatype اجازه ی ساخت هیچ جدولی به شما داده نمی شود مگر از مقادیر پیش فرض استفاده کرده باشیم.

هشدار: هر پایگاه داده، انواع داده ی خاص خود را دارد و حتی اگر اسم های datatype آن با پایگاه داده ی شما یکی باشند، باز هم ممکن است جزئیات آن متفاوت باشند بنابراین قبل از هر کاری باید به documentation پایگاه داده ی خود مراجعه کنید.

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

انواع داده های متنی

من سعی کرده ام برای مرتب تر شدن بحث، انواع داده ها را به صورت جدولی در بیاورم و هر کجا که نیاز به توضیح بود پایین آن جدول توضیحاتی ارائه خواهم کرد.

نوع داده (datatype) توضیحات
CHAR(size) یک رشته با طول مشخص و ثابت را نگه می‌دارد. این رشته می تواند شامل حروف، اعداد و کاراکترهای خاص باشد. طول رشته در پرانتز مشخص شده و تا 255 کاراکتر را ساپورت می کند.
VARCHAR(size) یک رشته با طول متغیر را نگه می دارد که می تواند شامل اعداد، حروف و کاراکترهای خاص باشد. حداکثر تعداد کاراکتر برای این نوع داده 255 کاراکتر است. 1
TINYTEXT به معنی «متن کوتاه» است و رشته ای با حداکثر تعداد 255 کاراکتر را نگه می دارد.
TEXT به معنی «متن» است و رشته ای به طول 65,535 بایت را ذخیره می کند.
BLOB مخفف Binary Large OBjects و به معنی «اشیاء بزرگ دو دویی» است. می تواند تا 65,535 بایت داده را ذخیره کند.
MEDIUMTEXT به معنی «متن متوسط» است و رشته ای تا 16,777,215 عدد کاراکتر را قبول می کند.
MEDIUMBLOB به معنی «BLOB های متوسط» است و تا 16,777,215 بایت اطلاعات را ذخیره می کند.
LONGTEXT به معنی «متن طولانی» است و رشته ای تا 4,294,967,295 عدد کاراکتر را ذخیره می کند.
LONGBLOB به معنی «BLOB های بزرگ» است و تا 4,294,967,295 بایت اطلاعات را ذخیره می کند.
ENUM(x,y,z,etc.) به شما اجازه می دهد لیستی از مقادیر ممکن را تعیین کنید. شما می توانید تا 65535 عدد مقدار مختلف را در یک لیست ENUM ذخیره کنید. اگر مقداری وارد ستون شود که در لیست ما ذکر نشده باشد، به جای آن یک مقدار خالی وارد خواهد شد. 2
SET دقیقا مانند ENUM است با این تفاوت که می تواند تا 64 عدد گزینه برای لیست مقادیر مجاز داشته باشد. همچنین می تواند بیشتر از یک انتخاب را ذخیره کند.

نکات شماره گذاری شده در جدول بالا:

1- اگر در پرانتز عددی بیشتر از 255 قرار دهید، نوع داده به طور خودکار تبدیل به TEXT خواهد شد.

2- ترتیب گزینه های این لیست بر همان اساسی است که شما آن ها را وارد می کنید. همچنین مقادیر ممکن باید با این فرمت تعیین شوند: ('ENUM('X','Y','Z

انواع داده های عددی

نوع داده (datatype) توضیحات
TINYINT(size) به معنای «عدد صحیح بسیار کوچک» است و از 128- تا 127 را به طور عادی شامل می شود. همچنین می تواند از 0 تا 255 را به صورت UNSIGNED1 شامل شود. شما می توانید حداکثر تعداد ارقام را در پرانتزِ جلوی آن مشخص کنید.
SMALLINT(size) به معنای «عدد صحیح کوچک» است و از 32768- تا 32767 را به طور عادی شامل می شود. همچنین می تواند از 0 تا 65535 را به صورت UNSIGNED1 شامل شود. شما می توانید حداکثر تعداد ارقام را در پرانتزِ جلوی آن مشخص کنید.
MEDIUMINT(size) به معنای «عدد صحیح متوسط» است و از 8388608- تا 8388607 را به طور عادی شامل می شود. همچنین می تواند از 0 تا 16777215 را به صورت UNSIGNED1 شامل شود. شما می توانید حداکثر تعداد ارقام را در پرانتزِ جلوی آن مشخص کنید.
INT(size) مخفف integer و به معنای «عدد صحیح» است. از 2147483648- تا 2147483647 را به طور عادی شامل شده و همچنین می تواند از 0 تا 4294967295 را به صورت UNSIGNED1 شامل شود. شما می توانید حداکثر تعداد ارقام را در پرانتزِ جلوی آن مشخص کنید.
BIGINT(size) به معنای «عدد صحیح بزرگ» است و از 9223372036854775808- تا 9223372036854775807 را به طور عادی شامل می شود. همچنین می تواند از 0 تا 18446744073709551615 را به صورت UNSIGNED1 شامل شود. شما می توانید حداکثر تعداد ارقام را در پرانتزِ جلوی آن مشخص کنید.
FLOAT(size,d) یک عدد اعشاری کوچک است. حداکثر تعداد ارقام صحیح را به جای size و حداکثر تعداد ارقام اعشار را به جای d قرار دهید.
DOUBLE(size,d) یک عدد اعشاری بزرگ است. حداکثر تعداد ارقام صحیح را به جای size و حداکثر تعداد ارقام اعشار را به جای d قرار دهید.
DECIMAL(size,d) همان DOUBLE است که به صورت یک رشته ذخیره می شود تا قسمت اعشاری آن ثابت بماند. حداکثر تعداد ارقام صحیح را به جای size و حداکثر تعداد ارقام اعشار را به جای d قرار دهید.

نکات شماره گذاری شده در جدول بالا:

1- اعداد صحیح یک گزینه ی اضافی به نام UNSIGNED دارند. در حالت عادی اعداد صحیح از مقادیر منفی به مقادیر مثبت می روند اما اگر UNSIGNED را به آن اضافه کنید عدد شروع کننده صفر خواهد بود و دیگر شامل اعداد منفی نخواهد شد.

انواع داده های تاریخی

من سعی کرده ام برای مرتب تر شدن بحث، انواع داده ها را به صورت جدولی در بیاورم و هر کجا که نیاز به توضیح بود پایین آن جدول توضیحاتی ارائه خواهم کرد.

نوع داده (datatype) توضیحات
DATE() شامل یک تاریخ می شود1 که در این قالب نوشته خواهد شد:

YYYY-MM-DD2

DATETIME() شامل ترکیبی از تاریخ و زمان3 است که از قالب زیر پیروی می کند:

YYYY-MM-DD HH:MI:SS4

TIMESTAMP() به زبان ساده یک timestamp است؛ مقادیر TIMESTAMP به صورت «ثانیه های گذری شده از Unix epoch (یعنی '00:00:00 1970-01-01' UTC) ذخیره می شوند و دارای قالب زیر هستند:

YYYY-MM-DD HH:MI:SS

TIME() یک زمان ساده5 را نگه می دارد: HH:MI:SS
YEAR() سال را به صورت دو رقمی و یا چهار رقمی ذخیره می کند.6

نکات شماره گذاری شده در جدول بالا:

1- طیف پشتیبانی شده در این نوع داده از '01-01-1000' تا '31-12-999' است.

2- قالب YYYY-MM-DD به ترتیب به معنی زیر است:

  • YYYY -> سال به صورت چهار عددی (مثال: 2019)
  • MM -> ماه به صورت دو عددی (مثال: 01 یا 12 یا 05 و...)
  • DD -> روز به صورت دو عددی (مثال: 01 یا 15 یا 28 یا 07 و ...)

3- طیف پشتیبانی شده در این نوع داده از '00:00:00 01-01-1000' تا '23:59:59 31-12-999' است.

4- قالب YYYY-MM-DD HH:MI:SS دقیقا مانند قالب قبلی است با این تفاوت که:

  • HH -> به معنی ساعت به صورت دو رقمی است (مانند 02 یا 18 و ...)
  • MI -> به معنی دقیقه به صورت دو رقمی است (مانند 08 یا 45 و ...)
  • SS -> به معنی ثانیه به صورت دو رقمی است (مانند 00 یا 57 و ...)

5- طیف پشتیبانی شده در این نوع داده از '838:59:59-' تا '838:59:59' است.

6- مقادیر پشتیبانی شده در حالت چهار رقمی، سال های 1901 الی 2155 و مقادیر پشتیبانی شده در حالت دو رقمی، سال های 70 تا 69 (سال های 1970 تا 2069) را شامل می شوند.

برای مشاهده ی انواع دیگر datatype ها در پایگاه های داده ی دیگر می توانید در اینترنت جستجو کنید و یا به وب سایت ماکروسافت بروید:

Microsoft Access Data Types

(Data types (Transact-SQL

کلام پایانی

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

بعد از آشنایی با این دوره به شما پیشنهاد می دهم به آموزش کار با MySQL نیز نگاهی بیندازید و سپس دوره هایی مانند دوره ی آموزشی PDO در روکسو (که شامل آموزش مبارزه با SQL Injection می باشد) را نیز مطالعه کنید.

امیدوارم از این سری آموزشی استفاده ی کافی را برده باشید.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری آموزش زبان SQL توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما (6 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

maitham
17 آبان 1402
خسته نباشید. با تشکر از زحمات شما عزیزان . کمترین کار تشکر از یکایک شما که به سادترین شکل آموزش رو رایگان در اختیار علاقمندان گذاشته اید. سپاس

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

امیر
30 مهر 1401
عالی بود روان، ساده و با حوصله دستتون درد نکنه

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

اعظم
12 اردیبهشت 1401
سلام آموزش بسیار روان و سلیس بود و در ضمن بعضی نکات خیلی ریز و کاربردی برای تفهیم بیشتر در چندین مورد آموزش داده شده بود تشکر از شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

روکسو
12 اردیبهشت 1401
خوشحالیم که رضایت داشتید. تشکر از نظر شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

هانیه عباسی
24 آبان 1399
سلام ببخشید انواع داده ها در بانک های اطلاعاتی هم همین میشه؟

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

user2002
30 شهریور 1399
آموزش بسیار صریح و مفیدی بود. ممنون از شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

کریمی
06 شهریور 1399
سلام. آموزش فوق العاده صریح و مفید بود . خیلی ممنون که دانشتونو رایگان در اختیار همه قرار دادید.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

روکسو
10 شهریور 1399
ممنون از همراهی شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.