چه نوع داده ای در پایگاه داده MySQL موجود است؟ در این مقاله، با انواع داده های عددی، انواع داده های متنی و موارد دیگر آشنا خواهید شد!
ممکن است مقاله ما را در مورد انواع داده در SQL دیده باشید. در اینجا، ما بر روی انواع داده های MySQL تمرکز می کنیم. ما در مورد پرکاربردترین آنها بحث خواهیم کرد: عددی، متنی، و تاریخ و زمان.
اگر به این موضوع علاقه دارید، حتماً دوره آموزشی ما را در انواع داده ها در SQL بررسی کنید. این بخشی از مسیر ایجاد ساختار پایگاه داده است. در این مقاله در وبلاگ ما درباره این آهنگ بیشتر بدانید.
انواع داده ها توصیف می کنند که چه نوع داده ای در هر ستون انتظار می رود. ممکن است اعداد، متن، تاریخ یا بسیاری موارد دیگر باشد. بر اساس این اطلاعات، موتور پایگاه داده تصمیم می گیرد که چگونه داده ها را در یک ستون مشخص مدیریت کند. به عنوان مثال، متون را بر اساس حروف الفبا اما اعداد را با افزایش یا کاهش مقدار عددی مرتب می کند.
LearnSQL.com یک فروشگاه واحد برای همه چیزهای SQL فراهم می کند که مفاهیم اولیه تا پیشرفته را در یک پلت فرم واحد پوشش می دهد. LearnSQL.com به طور خاص برای SQL طراحی شده است. این برنامه 30 دوره SQL تعاملی را ارائه می دهد که از مبتدی تا پیشرفته و چالش های ماهانه SQL برای تمرین مهارت های SQL شما دشوار است.
بیا شروع کنیم!
انواع داده های عددی در MySQL
انواع داده های عددی برای ذخیره اعداد هستند. این بدان معنی است که ما می توانیم عملیات حسابی را روی آنها انجام دهیم. به عنوان مثال، ما از انواع داده های عددی برای ذخیره تعداد اقلام خریداری شده توسط مشتری در یک سفارش، قیمت یک کالا یا مقادیر دما استفاده می کنیم.
یک نوع داده عددی ممکن است دقیق یا تقریبی باشد.
انواع داده های عددی دقیق در MySQL
عدد صحیح (INT)
نوع داده INTEGER (یا INT که به جای هم استفاده می شود) در MySQL اعداد کامل را ذخیره می کند. این اعداد می توانند مثبت یا منفی باشند، اما نمی توانند جزء کسری داشته باشند. زمانی که می دانیم داده های ستون باید همیشه یک عدد کامل باشند، از INTEGER استفاده می کنیم. به عنوان مثال، می توان از آن برای ذخیره تعداد دانش آموزان یک کلاس یا تعداد تی شرت های فروخته شده توسط یک فروشگاه استفاده کرد.
نوع داده INTEGER نیز نامزد خوبی برای کلید اصلی است. کلید اصلی یک ستون یا مجموعه ای از ستون ها است که برای هر ورودی در جدول متفاوت است و بنابراین می توان از آن برای شناسایی یک ردیف خاص استفاده کرد. اگر از INTEGER برای ذخیره کلید اصلی استفاده کنیم، آنگاه به هر سطر یک عدد متفاوت اختصاص داده می شود. INTEGER در MySQL همچنین دارای یک ویژگی مفید است، ویژگی AUTO_INCREMENT. به کد SQL زیر نگاه کنید:
کتاب ایجاد جدول (
id INT AUTO_INCREMENT PRIMARY KEY،
عنوان VARCHAR(255)
)
این یک کتاب جدول با دو ستون ایجاد می کند: شناسه و عنوان. ستون id یک کلید اصلی است. نوع داده آن INT است و از ویژگی AUTO_INCREMENT استفاده می کند.
حالا بیایید این کد را اجرا کنیم:
درج کنید
عنوان کتاب)
ارزش های
("داستان دو شهر")؛
صبر کنید، ما شناسه را ارائه نکردیم! اینجاست که AUTO_INCREMENT جادوی خود را انجام می دهد. هنگامی که NULL را در ستون INT AUTO_INCREMENT وارد می کنید یا مقدار آن را به طور کامل حذف می کنید (همانطور که در مثال بالا انجام دادیم)، به طور خودکار تنظیم می شود. AUTO_INCREMENT دنباله ای است که به طور پیش فرض از 1 شروع می شود و با هر رکورد درج شده 1 عدد افزایش می یابد.
مقادیر INTEGER در MySQL می توانند امضا یا بدون علامت باشند. یک INT بدون علامت مقادیر منفی را نمی پذیرد. اگر اعداد صحیح بدون علامت می خواهید، به سادگی کلمه کلیدی unsigned را اضافه کنید:
کتاب ایجاد جدول (
id INT بدون علامت AUTO_INCREMENT کلید اولیه،
عنوان VARCHAR(255)
)
یک مقدار INTEGER به 4 بایت فضای ذخیره سازی نیاز دارد. بنابراین، حداکثر مقداری که یک INT بدون علامت می تواند ذخیره کند 4294967295 است.
کوچک
SMALLINT در MySQL بسیار شبیه به INT است. تفاوت اصلی این است که SMALLINT فضای کمتری را اشغال می کند - فقط به 2 بایت نیاز دارد. با این حال، این همچنین به این معنی است که محدوده اعدادی که می تواند ذخیره کند کمتر است. حداکثر مقدار بدون علامت آن 65535 است.
اعشاری (NUMERIC)
نوع DECIMAL در MySQL مقادیر دقیق داده های عددی را ذخیره می کند. با این حال، برخلاف INTEGER و SMALLINT، می تواند دارای قطعات کسری باشد. در MySQL، NUMERIC به عنوان مترادف برای DECIMAL در نظر گرفته می شود.
هنگام کار با داده های مالی، از DECIMAL استفاده کنید، زیرا دقت اعشاری را ارائه می دهد. محاسبات پولی باید دقیق باشد. استفاده از تقریب ها قابل قبول نیست (در مورد آن در وبلاگ Vertabelo بیشتر بخوانید).
هنگام تعریف ستون DECIMAL، می توانید دو آرگومان ارائه دهید: دقت و مقیاس. دقت، تعداد کل ارقام مهم ذخیره شده است. مقیاس حداکثر تعداد ارقام ذخیره شده پس از نقطه اعشار است.
بیایید یک کتاب جدول با ستون قیمت ایجاد کنیم:
کتاب ایجاد جدول (
id INT بدون علامت AUTO_INCREMENT کلید اولیه،
عنوان VARCHAR(255)،
قیمت DECIMAL(4،2)
)
در مثال بالا، حداقل مقدار برای قیمت ستون 99.99- و حداکثر آن 99.99 است.
آرگومان مقیاس ممکن است حذف شود. مقدار پیش فرض آن 0 است، به این معنی که کسرها ذخیره نمی شوند. یعنی قیمت DECIMAL(4) معادل قیمت DECIMAL(4,0) است.
شما همچنین می توانید از DECIMAL بدون آرگومان استفاده کنید. مقدار پیش فرض برای دقت در MySQL 10 است. یعنی قیمت DECIMAL معادل قیمت DECIMAL (10,0) است.
مقدار فضای مورد نیاز مقادیر DECIMAL به تعداد ارقام ذخیره شده بستگی دارد و برای قطعات صحیح و کسری جداگانه محاسبه می شود. ارقام به مجموعه های 9 تایی تقسیم می شوند و هر مجموعه به 4 بایت نیاز دارد. الزامات ذخیره سازی برای ارقام باقی مانده در جدول زیر آورده شده است:
ارقام باقیمانده تعداد بایت
0 0
1-2 1
3-4 2
5-6 3
7-9 4
در مثال بالا، برای DECIMAL(4,2)، 2 رقم برای قسمت صحیح و 2 رقم برای قسمت کسری داریم که طبق جدول به 1 + 1 = 2 بایت نیاز دارد.
انواع داده های عددی تقریبی در MySQL
شناور
FLOAT یکی دیگر از انواع داده های MySQL است که برای ذخیره اعداد استفاده می شود. با این حال، تفاوت آن با DECIMAL در این است که دقیق نیست. FLOAT فقط مقادیر تقریبی را ارائه می دهد زیرا اعداد را در قالب باینری ذخیره می کند (از پایه 2 به جای پایه 10 استفاده می کند) و بسیاری از کسرهای اعشاری را نمی توان دقیقاً با استفاده از کسرهای باینری بیان کرد.
اگرچه این باعث صرفه جویی در ذخیره سازی می شود، اما به قیمت دقت تمام می شود. به خاطر داشته باشید که FLOAT نمی تواند برای ذخیره داده های پولی استفاده شود! در عوض، برای ذخیره داده های علمی، مانند نتایج اندازه گیری، خوب است:
ایجاد اندازه گیری جدول (
فاصله شناور
)
FLOAT به 4 بایت فضای ذخیره سازی نیاز دارد. محدوده آن 3.402823466E+38 تا 1.175494351E-38، 0 و 1.175494351E-38 تا 3.402823466E+38 است. توجه داشته باشید که در نماد علمی، E+n به معنای 10 به توان n است. بنابراین، 3.402823466E+38 همان 3.402823466E × 1038 است.
همچنین می توانید از نحو FLOAT(n) استفاده کنید، که در آن n دقت را در بیت ها مشخص می کند. n می تواند هر مقداری از 0 تا 53 را بگیرد و برای تعیین اینکه آیا از FLOAT یا DOUBLE برای نوع داده حاصل استفاده شود استفاده می شود. اگر 24 یا کمتر باشد، نوع داده مورد استفاده FLOAT است. در غیر این صورت، دو برابر است.
LearnSQL.com یک پلت فرم آنلاین است که برای کمک به شما در تسلط بر SQL طراحی شده است. این برنامه 30 دوره تعاملی را ارائه می دهد که از مبتدی تا پیشرفته دارای مشکل هستند. هر دوره هم دانش نظری و هم تمرینات عملی را ارائه می دهد تا بتوانید این ایده های جدید را تقویت کنید.
دقت مضاعف (دوبل، واقعی)
در MySQL، DOUBLE و REAL مترادف DOUBLE PRECISION هستند. DOUBLE به 8 بایت فضای ذخیرهسازی نیاز دارد، با مقادیری از -1.7976931348623157E+308 تا -2.2250738585072014E-308، 0، و از 2.2250738585072014 - 2.2250738585072014 E-308. از آنجایی که E+n در نماد علمی به معنای 10 به توان n است، -1.7976931348623157E+308 برابر است با –1.7976931348623157 × 10308.
همانطور که می بینید، DOUBLE از FLOAT دقیق تر است. اگر دقت بیشتری می خواهید، به جای FLOAT از DOUBLE استفاده کنید:
ایجاد اندازه گیری جدول (
فاصله دو برابر
)
با این حال، به خاطر داشته باشید که هنوز کاملاً دقیق نیست و فقط می تواند یک مقدار تقریبی را ارائه دهد.
درباره انواع داده های عددی در SQL در وبلاگ ما بیشتر بخوانید!
انواع داده های متنی در MySQL
انواع داده های متنی برای ذخیره دنباله ای از کاراکترها از جمله حروف، اعداد و نمادها استفاده می شود که معمولاً به آنها "رشته" می گویند. برای مثال، میتوانیم از رشتهها برای ذخیره ایمیل کاربر، عنوان کتاب یا محتوای یک پست وبلاگ استفاده کنیم.
CHAR
CHAR یک نوع داده متنی با اندازه ثابت است. یعنی فضای ذخیرهسازی اشغال شده توسط یک ستون CHAR همیشه همانطور که در تعریف ستون مشخص شده است است، حتی اگر برخی از ردیفها کاراکترهای کمتری را در آن ستون ذخیره کنند. اگر مقدار یک رشته کوتاهتر از اندازه مشخص شده ستون باشد، با فاصلههای خالی پر میشود تا زمانی که به آن اندازه برسد. هیچ فضایی را ذخیره نمی کند.
هر کاراکتر در MySQL به 1 بایت داده نیاز دارد. این بدان معنی است که اندازه جدول را می توان با کاهش طول CHAR اعلام شده به طور قابل توجهی کاهش داد. زمانی از نوع داده CHAR استفاده کنید که طول همه مقادیر یکسان باشد. در غیر این صورت بهتر است VARCHAR را انتخاب کنید.
برای مثال، میتوانید از CHAR برای ذخیره شمارههای کتاب ISBN استفاده کنید (ISBN مخفف شماره استاندارد بینالمللی کتاب است و همیشه از 13 کاراکتر تشکیل شده است):
کتاب ایجاد جدول (
id INT بدون علامت AUTO_INCREMENT کلید اولیه،
عنوان VARCHAR(255)،
isbn CHAR(13)
)
VARCHAR
یک ستون VARCHAR دارای اندازه متغیر است. این باعث صرفه جویی در فضا می شود زمانی که مدخل ها از نظر طول متفاوت باشند (به عنوان مثال، عنوان کتاب).
هر کاراکتر در MySQL به 1 بایت نیاز دارد. با این حال، برای ذخیره طول رشته به فضای بیشتری نیاز دارد: 1 بایت اگر رشته ذخیره شده کوتاهتر از 255 کاراکتر باشد یا 2 بایت اگر بیشتر از 255 کاراکتر باشد.
MySQL نسخه 5.0.3 یا بالاتر 65535 کاراکتر را در یک ستون VARCHAR ذخیره می کند. در نسخه های قبلی، VARCHAR فقط تا 255 کاراکتر را ذخیره می کرد.
بیایید VARCHAR را در عمل ببینیم:
کتاب ایجاد جدول (
id INT بدون علامت AUTO_INCREMENT کلید اولیه،
عنوان VARCHAR(255)
)
پیشوند اضافی با اندازه رشته باید ابتدا هنگام پردازش داده های ستون خوانده شود. این باعث افزایش زمان پردازش می شود. به همین دلیل، نمایه سازی VARCHAR کندتر از نمایه سازی CHAR است.
TEXT
نوع داده TEXT در MySQL برای ذخیره مقادیر زیادی متن استفاده می شود. آنها می توانند پست های وبلاگ، مقالات یا حتی یک کتاب کامل باشند.
توجه به این نکته ضروری است که ستون TEXT فقط یک اشاره گر را ذخیره می کند. داده های متن واقعی در خارج از جدول به عنوان یک حباب ذخیره می شود. این بدان معنی است که داده ها از خارج بازیابی می شوند و در نتیجه زمان دسترسی طولانی تر است. VARCHAR مستقیماً در جدول ذخیره می شود، بنابراین بسیار سریعتر است.
در نسخههای MySQL قبل از 5.0.3، TEXT کاراکترهای بیشتری نسبت به VARCHAR ذخیره میکرد (65535 کاراکتر در مقایسه با 255). در MySQL نسخه 5.0.3 یا بالاتر، حداکثر اندازه برای هر دو 65535 است.
آیا این بدان معناست که آنها اکنون می توانند همان تعداد کاراکتر را ذخیره کنند؟ لازم نیست.
MySQL اجازه نمی دهد که اندازه ردیف از 65535 بیشتر شود. این بدان معنی است که اگر جدول دارای ستون های دیگری باشد، اندازه VARCHAR نمی تواند به حداکثر اندازه نظری خود برسد. با TEXT، داده ها در خارج ذخیره می شوند و در این حد حساب نمی شوند.
ما می توانیم از TEXT برای ذخیره خلاصه کتاب طولانی تر استفاده کنیم:
کتاب ایجاد جدول (
id INT بدون علامت AUTO_INCREMENT کلید اولیه،
عنوان VARCHAR(255)،
خلاصه متن
)
TEXT حداکثر 64 کیلوبایت داده (که معادل 65535 کاراکتر است) ذخیره می کند. همچنین به 2 بایت اضافی برای ذخیره اشاره گر به داده های واقعی نیاز دارد.
آیا نیاز به ذخیره شخصیت های بیشتری دارید؟ شما می توانید از نوع داده MEDIOMTEXT یا حتی LONGTEXT استفاده کنید!
تاریخ و زمان انواع داده در MySQL
این نوع داده های MySQL برای مدیریت مقادیر تاریخ و زمان استفاده می شود: روز، ماه، سال، ساعت، دقیقه، ثانیه، و کسری از ثانیه. از آنها می توان برای ذخیره تاریخ ثبت نام کاربر، زمان پایان مسابقه یک ورزشکار یا زمان شروع سخنرانی در دانشگاه استفاده کرد.
تاریخ
نوع DATE برای ذخیره تاریخ ها (بدون قسمت زمانی) استفاده می شود. تاریخ ها را در قالب «YYYY-MM-DD» نمایش می دهد و از مقادیری از «1000-01-01» تا «9999-12-31» پشتیبانی می کند. یک ستون DATE به 3 بایت فضای ذخیره سازی نیاز دارد.
به عنوان مثال، می توانیم از آن برای ذخیره تاریخ تولد کاربران استفاده کنیم:
کاربر CREATE TABLE (
id INT AUTO_INCREMENT PRIMARY KEY،
تاریخ تولد DATE
)
وقت قرار
نوع DATETIME مقادیری را که شامل هر دو قسمت تاریخ و زمان هستند ذخیره می کند. از فرمت «YYYY-MM-DD hh:mm:ss» استفاده میکند و از مقادیری از «1000-01-01 00:00:00» تا «9999-12-31 23:59:59» پشتیبانی میکند.
به عنوان مثال، اگر بخواهیم تاریخ تولد را با ساعت دقیق ذخیره کنیم (مثلاً در پایگاه داده بیمارستان)، DATETIME گزینه خوبی است:
ایجاد جدول بیمار (
id INT AUTO_INCREMENT PRIMARY KEY،
تاریخ تولد DATETIME
)
DATETIME به 5 بایت فضای ذخیره سازی به اضافه بایت های اضافی بسته به دقت ثانیه های کسری نیاز دارد (جدول زیر را ببینید). البته توجه داشته باشید که در نسخه های MySQL قبل از 5.6.4 8 بایت است.
دقت ثانیه های کسری تعداد بایت های اضافی
0 0
1-2 1
3-4 2
5-6 3
دقت ثانیه های کسری با استفاده از نحو DATETIME(n) تعریف می شود، که در آن n مقادیر 0 تا 6 را می گیرد و تعداد ارقام در قسمت کسری را نشان می دهد. مقدار پیش فرض 0 است، یعنی هیچ ثانیه کسری وجود ندارد.
LearnSQL.com به شما امکان می دهد SQL را با نوشتن کد SQL به تنهایی یاد بگیرید. شما مهارت های SQL خود را به تدریج ایجاد می کنید. هر مفهوم جدید با یک تمرین تعاملی تقویت می شود. در واقع با نوشتن کد SQL، اعتماد به نفس خود را افزایش می دهید.
TIMESTAMP
نوع TIMESTAMP مقادیری را که شامل هر دو قسمت تاریخ و زمان هستند ذخیره می کند. مقادیر آن می تواند از '1970-01-01 00:00:01' UTC تا '2038-01-19 03:14:07' UTC باشد.
بخش UTC را می بینید؟ این تفاوت اصلی بین DATETIME و TIMESTAMP است. TIMESTAMP دادهها را با تبدیل آنها از منطقه زمانی فعلی به UTC هنگام ذخیره دادهها در پایگاه داده و انجام معکوس آن هنگام بازیابی، تنظیم میکند. TIMESTAMP به شما امکان می دهد بدون توجه به منطقه زمانی، نقطه دقیق زمانی را مشخص کنید. اگر برنامه در چندین منطقه زمانی کار کند، می تواند مفید باشد.
TIMESTAMP به 4 بایت فضای ذخیره سازی نیاز دارد (نسخه MySQL 5.6.4 و نسخه های بعدی بسته به دقت ثانیه های کسری به بایت های اضافی نیاز دارد - جدول بالا را در بخش DATETIME ببینید). به فضای کمتری نسبت به DATETIME نیاز دارد اما محدوده پشتیبانی شده کمتری دارد.
TIMESTAMP ممکن است برای ستونهایی با تاریخهای قبل از 1970 یا بعد از 2038 کار نکند. با این حال، میتوانید آن را برای ثبت اقدامات کاربر یا رویدادهای برنامه، مانند مهر زمانی آخرین ورود کاربر، انتخاب کنید:
کاربر CREATE TABLE (
id INT AUTO_INCREMENT PRIMARY KEY،
last_login TIMESTAMP(3)
)
توجه داشته باشید که ما از نحو TIMESTAMP(n) برای ذخیره ثانیه های کسری در اینجا استفاده می کنیم.
زمان
نوع داده TIME برای ذخیره مقادیر زمان استفاده می شود. همچنین می تواند زمان یا فواصل زمانی سپری شده را نشان دهد. به همین دلیل، مقادیر می توانند منفی باشند و قسمت ساعت می تواند بزرگتر از 24 باشد.
TIME در قالب «hh:mm:ss» یا «hhh:mm:ss» نمایش داده میشود. از مقادیری از '-838:59:59' تا '838:59:59' پشتیبانی می کند و به 3 بایت نیاز دارد (نسخه MySQL 5.6.4 و نسخه بعدی بسته به دقت ثانیه های کسری به بایت های اضافی نیاز دارد - جدول را ببینید. بخش DATETIME).
ممکن است از TIME برای ذخیره برنامه سخنرانی دانشگاه استفاده کنیم:
سخنرانی ایجاد جدول (
id INT AUTO_INCREMENT PRIMARY KEY،
start_time TIME
end_time TIME
)
سایر انواع داده های MySQL
بسیاری از انواع داده های دیگر در MySQL وجود دارد. می توانید اطلاعات بیشتری در مورد آنها در اسناد MySQL بخوانید. ممکن است به انواع داده های عددی مانند TINYINT، MEDIUMINT، و BIGINT و همچنین به انواع داده های رشته ای مانند باینری، VARBINARY، BLOB، ENUM و SET علاقه مند باشید.
علاوه بر این، دسته بندی های دیگری از نوع داده در MySQL وجود دارد: فضایی و JSON. انواع داده های مکانی می توانند داده های مکانی مانند مختصات را ذخیره کنند. نوع داده JSON می تواند اشیاء را در قالب جاوا اسکریپت Object Notation ذخیره کند.
از دانش جدید خود در مورد انواع داده MySQL استفاده کنید
برای امروز کافی است! شما اکنون با درک بهتری از انواع داده های MySQL مسلح شده اید. اگر میخواهید حتی بیشتر درباره MySQL بیاموزید، قطعاً نمیخواهید SQL جدید ما را از A تا Z در MySQLcourse از دست بدهید!
اگر دوست دارید SQL را با استفاده از تمرینات عملی یاد بگیرید، باید LearnSQL.com را امتحان کنید.
دوره آموزشی انواع داده ما در SQL را فراموش نکنید که بخشی از مسیر ایجاد ساختار پایگاه داده است. اطلاعات بیشتر در مورد این آهنگ را در این مقاله در وبلاگ ما بخوانید.
و در صورتی که می خواهید نگاهی به انواع داده در موتورهای پایگاه داده دیگر بیندازید، مقالات ما را در مورد انواع داده های سرور MS SQL و انواع داده PostgreSQL بررسی کنید.
موفق باشید!
- ۰۱/۰۷/۲۰