انواع داده در MySQL — راهنمای جامع
در پایگاههای داده MySQL تعریف کردن صحیح فیلدها در یک جدول برای بهینهسازی کلی آن پایگاه داده بسیار حائز اهمیت است. بدین ترتیب باید تنها انواع و اندازههایی که واقعاً مورد نیاز دارید را تعریف کنید. برای نمونه اگر میدانید که در یک فیلد تنها به 2 کاراکتر نیاز خواهید داشت، نباید یک فیلد 10 کاراکتری تعریف کنید. این نوع فیلدها (یا ستونها) به نام انواع داده شناخته میشوند، چون شما نوعهای مختلفی از دادهها را در این فیلدها ذخیره میکنید.
MySQL از انواع داده مختلفی استفاده میکند که آنها را به طور عمده به سه دسته میتوان تقسیم نمود:
- عددی
- تاریخ و زمان
- انواع رشتهای
هر کدام از این انواع را در ادامه به تفصیل بررسی میکنیم.
انواع داده عددی
MySQL از همه انواع داده استاندارد ANSI SQL پشتیبانی میکند. بنابراین اگر قبلاً با سیستم پایگاه داده دیگری آشنا باشید، تعاریف زیر نیز برای شما آشنا خواهند بود. در فهرست زیر انواع داده عددی متداول و توضیحات آنها ارائه شدهاند:
- INT – یک عدد صحیح با اندازه نرمال است که میتواند با علامت یا بی علامت باشد. اگر با علامت باشد امکان درج اعداد در محدوده 2147483648- تا 2147483647 وجود دارد. اگر بی علامت باشد میتوان اعدادی را از 0 تا 4294967295 در آن جای داد. در این نوع داده اعدادی با بیشینه 11 رقم میتوان تعریف کرد.
- TINYINT – یک نوع عدد صحیح بسیار کوچک است که میتواند با علامت یا بی علامت باشد. اگر با علامت باشد محدوده اعداد 128- تا 127 است و در صورت بی علامت بودن اعدادی را از 0 تا 255 در خود جای میدهد. به طور کلی در این نوع میتوان اعدادی تا نهایتاً 4 رقم تعریف کرد.
- SMALLINT – یک نوع عدد صحیح کوچک که میتواند بی علامت یا با علامت باشد. اگر با علامت باشد امکان درج اعدادی در محدوده 32768- تا 32767 و در صورت بی علامت بودن اعدادی از 0 تا 65535 در آن جای میگیرند. به طور کلی این نوع، اعدادی تا نهایتاً 5 رقم را در خود جای میدهد.
- MEDIUMINT – یک نوع عدد صحیح با اندازه متوسط است که میتواند بی علامت یا با علامت باشد. اگر با علامت باشد اعدادی در محدوده 8388608- تا 8388607 در آن تعریف میشوند و در صورتی که بی علامت باشد میتوان اعدادی را از 0 تا 16777215 در آن جای داد. به طور کلی این نوع میتواند اعدادی با بیشینه 9 رقم را در خود جای دهد.
- BIGINT – این نوع از اعداد صحیح میتواند بی علامت یا با علامت باشد. در صورتی که با علامت باشد محدوده مجاز برای آن از 9223372036854775808- تا 9223372036854775807 است. در صورتی که بی علامت باشد میتوان اعدادی از 0 تا 18446744073709551615 را در آن تعریف کرد. به طور کلی اعدادی که در این نوع تعریف میشوند، حداکثر 20 رقم دارند.
- (FLOAT(M,D – این نوع، یک عدد اعشاری تعریف میکند که نمیتواند بی علامت باشد. شما میتوانید طول نمایشی (M) و تعداد ارقام (D) را در این نوع تعریف کنید. این پارامترها الزامی نیستند و مقادیر پیشفرض آنها به ترتیب 10 و 2 است که 2 تعداد ارقام اعشار و 10 تعداد ارقام نمایش یافته از عدد (شامل مقدار اعشاری) است. دقت اعشاری در نوع FLOAT میتواند تا بیشینه 24 رقم افزایش یابد.
- (DOUBLE(M,D – یک عدد اعشاری با دقت مضاعف است که نمیتواند بی علامت باشد. در این نوع میتوان طول (M) و همچنین تعداد ارقام اعشاری (D) را تعریف کرد. این پارامترها الزامی نیستند و در صورتی که تعیین نشوند مقادیر پیشفرض به ترتیب 126 و 4 هستند که 4 تعداد ارقام اعشار است. دقت اعشاری در این نوع میتواند تا 53 رقم باشد. نام دیگر این نوع REAL است.
- (DECIMAL(M,D – یک عدد اعشاری غیر فشرده است که نمیتواند بی علامت باشد. در اعداد اعشاری غیر فشرده، هر رقم اعشار معادل یک بایت است. تعریف کردن طول نمایشی (M) و تعداد اعشار (D) الزامی است. NUMERIC یک مترادف برای نوع عددی DECIMAL محسوب میشود.
انواع داده تاریخ و زمان
MySQL برای تاریخ و زمان از انواع داده زیر استفاده میکند:
- DATE – این نوع شامل تاریخی با قالب YYYY-MM-DD است که بین 01-01-1000 تا 31-12-9999 قرار دارد. برای نمونه تاریخ سیام دسامبر 1973 را میتوان به صورت 30-12-1973 ذخیره کرد.
- DATETIME - این نوع شامل ترکیبی از تاریخ و زمان را در قالب YYYY-MM-DD HH:MM:SS ذخیره میکند. تاریخها میبایست بین 00:00:00 01-01-1000 تا 23:59:59 31-12-9999 باشند. برای مثال ساعت 3:30 بعد از ظهر تاریخ سیام دسامبر 1973 به صورت 15:30:00 30-12-1973 خواهد بود.
- TIMESTAMP – این نوع از داده تاریخی زمانی بین نیمه شب تاریخ یکم ژانویه 1970 تا سال 2037 را ذخیره میکند. این نوع داده شبیه داده قبلی DATETIME است، تنها تفاوت این است که بین اعداد خط تیره قرار نمیگیرد. بدین ترتیب زمان 3:30 بعد از ظهر سیام دسامبر 1973 در این قالب به صورت 19731230153000 (YYYYMMDDHHMMSS) ذخیره میشود.
- TIME – زمان را در قالب HH:MM:SS ذخیره میکند.
- (YEAR(M – یک سال را در قالب 2 رقمی یا 4 رقمی ذخیره میکند. اگر طول به صورت 2 تعیین شده باشد، در این صورت میتوان سالهای بین 1970 تا 2069 (70 تا 69) را ذخیره کرد. اگر طول سال به صورت 4 رقمی تعیین شده باشد در این صورت YEAR میتواند سالهایی بین 1901 تا 2155 را در خود جای دهد.
انواع داده رشتهای
با این که انواع داده عددی و تاریخی جالب هستند، اما اغلب دادههایی که لازم است در پایگاه داده ذخیره کنید در قالب رشتهها خواهند بود. در فهرست زیر انواع داده رایج رشتهای مورد استفاده در MySQL معرفی شدهاند:
- (CHAR(M – یک رشته با طول ثابت بین 1 تا 255 کاراکتر تعریف میکند. برای نمونه (Char(5. وقتی عددی کمتر از مقدار ذکر شده در این نوع ذخیره شود، مقادیر خالی سمت راست با کاراکتر فاصله (space) پر میشوند. تعریف کردن طول ضروری نیست و مقدار پیشفرض آن برابر با 1 است.
- (VARCHAR(M – یک رشته با طول متغیر بین 1 و 255 کاراکتراست. برای مثال (VARCHAR(25. هنگام تعریف کردن یک فیلد از این نوع میبایست طول آن حتماً قید شود.
- BLOB یا TEXT – فیلدی با بیشینه طول 65535 کاراکتر است. منظور از BLOB «اشیای باینری بزرگ» (Binary Large Objects) است و از آن برای ذخیرهسازی مقادیر بزرگی از دادههای باینری مانند تصاویر یا دیگر انواع فایل استفاده میشود. فیلدهایی که به صورت TEXT تعریف میشوند نیز مقادیر بالایی از متن را در خود جای میدهند. تفاوت بین این دو آن است که ذخیرهسازی و مقایسه دادههای ذخیرهسازی شده در نوع BLOB به حروف کوچک/بزرگ حساس هستند؛ در حالی که در مورد فیلدهای Text چنین مسئلهای وجود ندارد. لازم نیست طولی برای این نوع دادهها ذکر شود.
- TINYBLOB یا TINYTEXT – این نوع داده یک ستون BLOB یا TEXT با بیشینه طول 25 کاراکتر است. در این نوع داده نیز طولی ذکر نمیشود.
- MEDIUMBLOB یا MEDIUMTEXT – این نوع داده یک ستون BLOB یا TEXT با بیشینه طول 16777215 کاراکتر است. در این نوع داده نیازی به ذکر طول فیلد وجود ندارد.
- LONGBLOB یا LONGTEXT – این نوع داده یک ستون BLOB یا TEXT با بیشینه طول 4294967295 کاراکتر است. در این نوع داده نیازی به ذکر طول نیست.
- ENUM – نام این نوع داده اختصاری برای عبارت enumeration است که در واقع اصطلاحی برای لیست محسوب میشود. زمانی که یک نوع داده ENUM تعریف میکنیم، در واقع لیستی از آیتمها ایجاد میکنیم که مقادیر آنها باید ذکر شوند یا این که میتوانند NULL باشند. برای نمونه اگر بخواهید یک فیلد شامل A یا B یا C داشته باشید باید یک نوع ENUM به صورت ('ENUM ('A', 'B', 'C تعریف کنید و هر زمان تنها این مقادیر (یا NULL) میتوانند در این فیلد قرار بگیرند.
اگر این نوشته مورد توجه شما قرار گرفته است، پیشنهاد میکنیم آموزشهای زیر را نیز ملاحظه کنید:
- ساختار PHP و نحوه اتصال به پایگاه داده MySQL — به زبان ساده
- پایگاه داده و سیستم های مدیریت اطلاعات
- مجموعه آموزشهای علوم کامپیوتر
- مجموعه آموزشهای ابزارهای مهندسی کامپیوتر
- مفاهیم مقدماتی MySQL — راهنمای جامع
- کلاستر چند گره ای MySQL روی اوبونتو ۱۸.۰۴ — به زبان ساده
- نصب MySQL — راهنمای گام به گام
==
سپاس از استاد گرامی عالی بود.
یک سوال اینکه برای نمایش کامل یک اینپوت حجیم مثلا از نوع textarea در فرم برای گرفتن آدرس مشتری و با حجم 255 کارکتر از نوع varchar در جدول mysql چه راهی وجود دارد؟ چه نوع تایپی برای نمایش کامل آن در mysql ؟
مطلب مفیدی بود ممنون