English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
تشرح الفصول التالية أنواع البيانات التي يدعمها MySQL.
يدعم MySQL ثلاثة أنواع من أنواع البيانات:النص،العددوالتاريخ/الوقتنوع البيانات.
تُستخدم أنواع البيانات النصية عادةً لتخزين الأسماء، العناوين، الوصفات أو أي قيمة تحتوي على أحرف وعدد، بما في ذلك البيانات الثنائية مثل الصور أو ملفات الصوت.
يُسمح لنوع البيانات CHAR بتخزين سلاسل نصية ثابتة طولها أقصاها 255 حرف، بينما يُسمح لنوع البيانات VARCHAR بتخزين سلاسل نصية متغيرة طولها أقصاها 65,535 حرف (محدود إلى 255 حرف قبل MySQL 5.0.3).
يُعرف طول الت声明ات من أنواع البيانات CHAR وVARCHAR بأنه عدد الحروف التي يُريد التخزين.
الفرق الرئيسي بين أنواع البيانات CHAR وVARCHAR هو الطريقة التي يتم فيها تخزين البيانات. عند تخزين القيمة في عمود CHAR، يتم تعبئة الفراغات بالحروف المحددة من اليمين، ولكن عند تخزين القيمة في عمود VARCHAR لن يتم تعبئة الفراغات. هذا يعني أن القيمة “ab” إذا تم تخزينها كـ CHAR(4) في عمود VARCHAR(4)، ستتم تخزينها كـ “ab”, بينما القيمة نفسها ستتم تخزينها كـ “ab”.
نصيحة:استخدام نوع البيانات CHAR لتحديد القيم ذات الطول الثابت، مثل رموز البلدان/المناطق. بالنسبة للقيم التي يمكن أن تكون بطول متغير، مثل الأسماء أو العناوين، يمكن أن توفر VARCHAR المساحة.
ملاحظة:أطول السلسلة المسموح بها في VARCHAR يعتمد على أكبر حجم سطر (65,535 بايت، يتم تقاسمه بين جميع الأعمدة) والنوع الذي يتم استخدامه من مجموعات الحروف.
BINARY وVARBINARY يشبهان CHAR وVARCHAR، ولكن الفرق هو أنهم يحتويان على سلاسل ثنائية وليس سلاسل غير ثنائية. أطول السلسلة المسموح بها في BINARY وVARBINARY هو نفسه لأول مرة في CHAR وVARCHAR، ولكن الفرق هو أن طول BINARY وVARBINARY يُقاس بالبايت وليس بالحروف.
يُستخدم نوع البيانات TEXT و BLOB لتخزين كميات كبيرة من البيانات. يتم استخدام نوع البيانات TEXT لتخزين سلاسل نصية طويلة مثل الوصفات، تعليقات المدونات، إلخ.
BLOB هو موضوع ثنائي كبير يمكنه حمل كميات متغيرة من البيانات. وهو مفيد بشكل خاص عندما تحتاج إلى تخزين ملفات وسائط ثنائية في قاعدة البيانات (مثل صور أو ملفات صوتية).
هناك أربعة أنواع من BLOB هي TINYBLOB، BLOB، MEDIUMBLOB و LONGBLOB. الفرق بينها يكمن فقط في الطول الأقصى للقيم التي يمكنها حملها. كذلك، هناك أربعة أنواع نصية هي TINYTEXT، TEXT، MEDIUMTEXT و LONGTEXT. وهي تتطابق مع أربعة أنواع BLOB، ولديها نفس الطول الأقصى والاحتياجات في التخزين.
في الجدول أدناه تم تقديم أنواع البيانات النصية في MySQL التي تظهر في أزواج. سواء كان النوع ثنائي أو غير ثنائي، فإن طول الأقصى يتم حسابه بالبايتات.
نوع البيانات الثنائي | نوع البيانات غير الثنائي | الطول الأقصى |
---|---|---|
BINARY | CHAR | 255 |
VARBINARY | VARCHAR | 65,535 |
TINYBLOB | TINYTEXT | 255 |
BLOB | TEXT | 65,535 |
MEDIUMBLOB | MEDIUMTEXT | 16,777,215 |
LONGBLOB | LONGTEXT | 4,294,967,295 |
ملاحظة:بالنسبة لنوع البيانات النصي غير الثنائي، يُطلق على قيمة طول العمود اسم عدد الأحرف وليس عدد البايتات. مما يعني أن عدد الأحرف القصوى للسلسلة التي تحتوي على أحرف متعددة الأبجديات أقل.
يسمح نوع البيانات ENUM بتحديد قائمة القيم الممكنة التي يمكن تخزينها في العمود. على سبيل المثال، يمكن تحديد كـgender ENUM('male', 'female') NOT يمكن للأعمدة NULL أن تحتوي على أي من القيم التالية: ''،'male' أو 'female'. يمكنك تحديد أقصى عدد من القيم المختلفة في قائمة ENUM هو 65,535. إذا قمت بإدراج قيمة غير صالحة في عمود ENUM (أي، أي سلسلة من الأحرف غير موجودة في قائمة القيم المسموح بها)، سيتم إدراج سلسلة من الأحرف الفارغة.
يسمح نوع البيانات SET بتحديد قائمة القيم التي يمكن إدخالها في العمود، مثل القائمة المفردة. ومع ذلك، يختلف نوع البيانات SET عن نوع البيانات ENUM الذي يسمح فقط باختيار قيمة واحدة، حيث يمكن لنوع البيانات SET اختيار عدة قيم من القائمة المحددة.
على سبيل المثال، يمكن لتخزين الأعمدة المحددة كـoption SET('one', 'two') NOT NULL أي من القيم التالية: 'one', 'two' أو 'one,two'. يمكن استخدام علامة逗لة للفصل بين القيم المتعددة (،). بالنسبة لجنسية البيانات SET، يمكن تحديد أقصى عدد من القيم المختلفة هو 64.
يُستخدم نوع البيانات العددية عادةً لتحفظ بيانات مثل الأسعار، الراتب، إلخ.
يدعم MySQL نوع SQL المعياري للعدد الصحيح INTEGER (أو INT) و SMALLINT. يدعم MySQL أيضًا أنواع العدد الصحيح TINYINT، MEDIUMINT و BIGINT كتوسيع للمعيار SQL. يوضح الجدول أدناه نطاق كل نوع من أنواع العدد الصحيح.
نوع البيانات | نطاق (معلن) | نطاق (غير معلن) |
---|---|---|
TINYINT | من -128 إلى 127 | من 0 إلى |
SMALLINT | من -32768 إلى 32767 | من 0 إلى |
MEDIUMINT | من -8388608 إلى 8388607 | من 0 إلى |
INT | من -2147483648 إلى 2147483647 | من 0 إلى |
BIGINT | من -9223372036854775808 إلى 9223372036854775807 | من 0 إلى |
نوع البيانات العددية يحتوي على خصائص إضافية Signed (إشارة) و Unsigned (بدون إشارة). يتم تعيين نوع البيانات العددية بشكل افتراضي كـ Signed، وهو ما يعني نطاقه من السالب إلى الإيجابي. لا يسمح تعيين خاصية Unsigned لعمود العددية باستخدام القيم السلبية، مما يرفع نطاقها من البداية من 0 بدلاً من العدد السلبي.
نوعان DECIMAL و NUMERIC تستخدمان لتحفظ القيم العددية الدقيقة. تُسمى هذه الأنواع من البيانات أيضًا "نوعًا ثابتًا" أو "نوعًا دقيقًا"، وتُستخدم عادةً عند الحاجة إلى الحفاظ على دقة معينة، مثل تحفظ بيانات العملة مثل أسعار المنتجات في MySQL، يتم تنفيذ NUMERIC كـ DECIMAL.
يمكن تحديد الدقة والعدد من الأرقام بعد النقطة عند إعلان عمود DECIMAL أو NUMERIC، مثل DECIMAL (P،S) أو NUMERIC (P،S)، حيث P هو الدقة وS هو عدد الأرقام بعد النقطة. يحدد تحديد الدقة عدد الأرقام القابلة للتحفظ في العمود (بما في ذلك أرقام بعد النقطة)، بينما يحدد عدد الأرقام بعد النقطة عدد الأرقام القابلة للتحفظ بعد النقطة. على سبيل المثال، يمكن أن يحتوي عمود DECIMAL (6,2) على أي قيمة تحتوي على ستة أرقام وأربعة عشر من الأرقام بعد النقطة، أي من -9999.99 إلى 9999.99.
نوعان FLOAT و DOUBLE يعبّران عن قيم بيانات تقريبية. هذا هو السبب في أن هذه الأنواع من البيانات تُسمى أيضًا "نوعًا مرجحيًا" أو "نوعًا تقريبيًا
جملة دعم MySQL: FLOAT (M،D) أو DOUBLE PRECISION (M،D). في هذا السياق، (M،D) يعني أنه يمكن تخزين قيم تصل إلى M خانة، حيث يمكن أن تكون D خانة بعد نقطة العشرية. على سبيل المثال، العنصر الذي يُعرض كـ FLOAT (7,3) يُعرض كـ -9999.999. يتم إجراء تقريب القيم في MySQL عند تخزينها، لذا إذا تم إدخال 9999.0009 في عمود FLOAT (7,3)، فإن النتيجة تقريبًا ستكون 9999.001.
ملاحظة:قد يؤدي مقارنة القيم العشوائية إلى مشاكل لأنها قيم تقريبية وليست قيمًا دقيقة. لذا، من أجل تخزين القيم التي يمكن استخدامها للتعامل مع المقارنة، مثل price، salary، وما إلى ذلك، يُفضل استخدام نوع البيانات DECIMAL.
يُستخدم نوع البيانات تاريخ和时间 عادةً لتخزين البيانات مثل تاريخ الميلاد، تاريخ التوظيف، التواريخ والوقت عند إنشاء أو تحديث سجلات الجدول، وما إلى ذلك.
يُستخدم نوع البيانات DATE لتخزين التواريخ. يتم تخزين DATE في MySQL بتنسيق 'YYYY-MM-DD' ويمكن استرجاع القيم، حيث YYYY، MM و DD هي أجزاء السنة، الشهر واليوم. نطاق الدعم هو من '1000-01-01' إلى '9999-12-31'.
يمكن استخدام نوع البيانات TIME لتخزين الأيام أو الفترات الزمنية. يتم تخزين TIME في MySQL بتنسيق 'HH:MM:SS' ويمكن استرجاع القيم، حيث HH، MM و SS هي أجزاء الساعة، الدقائق والثواني (أو تنسيق 'HHH:MM:SS' لحساب الساعات الكبيرة). نطاق القيم المدعومة هو من '-838:59:59' إلى '838:59:59'.
جزء الساعة قد يكون كبيرًا لأن نوع TIME في MySQL يمكن استخدامه ليس فقط لتخزين الوقت في اليوم (يجب أن يكون أقل من 24 ساعة)، بل أيضًا لتخزين الوقت أو الفترة بين اثنين من الأحداث (قد تكون أكبر بكثير من 24 ساعة، حتى السلبية).
ملاحظة:بالافتراض، القيم التي تتجاوز نطاق TIME ولكنها صالحة ستُقطع إلى أقرب نقطة في النطاق. على سبيل المثال، '860:00:00' سيتم تحويله إلى '838:59:59'. القيم غير الصالحة سيتم تحويلها إلى '00:00:00'.
نوع البيانات DATETIME و TIMESTAMP يُستخدمان لتخزين القيم التاريخية والوقتية المدمجة بتنسيق 'YYYY-MM-DD HH:MM:SS'. هذه الأنواع عادةً ما تُستخدم لتخزين التواريخ والوقت عند إرسال أوامر التوزيع، أو عند إنشاء أو تعديل سطر في الجدول، وما إلى ذلك.
هذه نوعين من البيانات مشابهة في العديد من الجوانب، ولكن هناك بعض الاختلافات. DATETIME يدعم نطاق '1000-01-01'. من '00:00:00' إلى '9999-12-31 23:59:59'، ومع ذلك، نطاق علامة التوقيت هو '1970-01-01 00:00:01'. من UTC إلى '2038-01-19 03:14:07' UTC.
TIMESTAMP و DATETIME لديهما خصائص تحديث وتحديد تلقائي خاصة، ولكن هذه الخصائص لا تنطبق على DATETIMEM قبل MySQL 5.6.5.
ملاحظة: MySQL يحوّل قيمة TIMESTAMP من منطقة التوقيت الحالية إلى UTC لتخزينها، ثم يحوّلها من UTC إلى منطقة التوقيت الحالية عند الاسترجاع.
نوع البيانات YEAR يستخدم لتخزين القيم السنوية في نموذج YYYY.
يمكن إعلانها كYEAR أو YEAR(4). نطاق القيم المدعومة لـ YEAR هو من 1901 إلى 2155. القيم غير الصالحة لـ YEAR يتم تحويلها إلى 0000.
ملاحظة:الإصدارات القديمة من MySQL تسمح باستخدام YEAR(2) لتخزين قيم السنة الثنائية، ولكن تم إزالة الدعم لها الآن، وفي MySQL 5.7.5 تم حذف دعمها.