في هذا الدرس 6تصفّح المواضيع
تقسّم MySQL السلاسل النصية القصيرة إلى فئتين أساسيتين: النوع CHAR(M) للسلاسل ثابتة الطول (من 0 إلى 255 حرفاً)، والنوع VARCHAR(M) للسلاسل متغيرة الطول (ضمن سقف الصف البالغ 65,535 بايت). بينما يملأ CHAR الفراغات المتبقية بمسافات عند الحفظ ويزيلها عند القراءة، يحفظ VARCHAR الحروف الفعلية فقط متبوعة ببادئة طول حجمها 1 أو 2 بايت.
-- Measure character count vs byte length in UTF8MB4
SELECT
CHAR_LENGTH('MySQL 8') AS en_chars,
LENGTH('MySQL 8') AS en_bytes,
CHAR_LENGTH(_utf8mb4 0xD8A8D98AD8A7D986D8A7D8AA) AS mb_chars,
LENGTH(_utf8mb4 0xD8A8D98AD8A7D986D8A7D8AA) AS mb_bytes;
يحدّد نظام الترميز (Character Set) كيفية تمثيل الحروف كسلاسل بايتات ثنائية، بينما تحدّد قواعد المقارنة (Collation) قوانين ترتيب ومطابقة تلك الحروف. في MySQL 8، أصبح الترميز الافتراضي هو utf8mb4 الداعم لكامل حروف يونيكود رباعية البايت بما فيها اللغة العربية والرموز التعبيرية، مقترناً بقواعد المقارنة القياسية utf8mb4_0900_ai_ci.
-- Inspect string charset, collation, and case sensitivity
SELECT
CHARSET(_utf8mb4'CloseTag') AS active_charset,
COLLATION(_utf8mb4'CloseTag') AS active_collation,
_utf8mb4'MySQL' = _utf8mb4'mysql' AS is_case_insensitive;
عندما يتجاوز المحتوى النصي مثل مقالات المدونات أو التوثيق البرمجي أو سجلات النظام حدود الصفوف القصيرة، توفّر MySQL أربع درجات للنصوص الطويلة: TINYTEXT بسعة 255 بايت، وTEXT بسعة 65,535 بايت (نحو 64 كيلوبايت)، وMEDIUMTEXT بسعة 16 ميجابايت تقريباً، وLONGTEXT بسعة تصل إلى 4 جيجابايت.
-- Extract snippets and byte sizes from long text literals
SELECT
LEFT('MySQL 8 InnoDB off-page TEXT storage', 14) AS summary,
CHAR_LENGTH('MySQL 8 InnoDB off-page TEXT storage') AS chars,
LENGTH('MySQL 8 InnoDB off-page TEXT storage') AS bytes;
على عكس السلاسل النصية، تخزّن الأنواع الثنائية تدفقات البايتات الخام دون أي نظام ترميز حروف أو قواعد مقارنة لغوية. يُستخدم النوعان BINARY(M) وVARBINARY(M) لحفظ مصفوفات البايتات القصيرة مثل بصمات التشفير SHA-256 أو معرّفات UUID المضغوطة، بينما تُخصّص عائلة BLOB للكائنات الثنائية الأكبر حجماً.
-- Convert between hexadecimal representations and binary bytes
SELECT
HEX('MySQL') AS hex_encoded,
CAST(UNHEX('4D7953514C') AS CHAR) AS decoded_text,
LENGTH(UNHEX('4D7953514C')) AS raw_byte_count;
يقيّد النوع ENUM الحقل النصي بقيمة واحدة فقط تُختار من قائمة محددة مسبقاً (تصل إلى 65,535 خياراً)، ويحفظها داخلياً كفهرس رقمي مضغوط بحجم 1 أو 2 بايت. أما النوع SET فيسمح باختيار قيمة أو أكثر من أصل 64 خياراً كحد أقصى، ويمثّلها داخلياً كقناع بتات ثنائي.
-- Inspect ENUM index positions and SET comma-separated lists
SELECT
FIELD('active', 'pending', 'active', 'archived') AS enum_code,
FIND_IN_SET('editor', 'reader,editor,admin') AS set_match_pos,
MAKE_SET(1 | 4, 'read', 'write', 'delete') AS active_flags;
| نوع البيانات | السعة القصوى | بادئة الطول / التمثيل الداخلي | يدعم ترميز الحروف | حالة الاستخدام الهندسي المثلى |
|---|---|---|---|---|
CHAR(M) | 255 حرفاً | طول ثابت بدون بادئة طول | نعم (utf8mb4) | رموز الدول القياسية (SA) والأكواد الثابتة |
VARCHAR(M) | حتى 65,535 بايت (ضمن سقف الصف) | 1 بايت (≤255B) أو 2 بايت (>255B) | نعم (utf8mb4) | الأسماء، البريد الإلكتروني، العناوين، والروابط |
TEXT / LONGTEXT | 64 كيلوبايت / 4 جيجابايت | 2 بايت / 4 بايت (تخزين فائض خارجي) | نعم (utf8mb4) | محتوى المقالات، التوثيق الطويل، وسجلات الأحداث |
BINARY(M) / VARBINARY(M) | حتى 255 بايت / 65,535 بايت | بايتات خام (بدون بادئة / 1–2 بايت) | لا (بايتات ثنائية خام) | بصمات التشفير SHA-256 ومعرّفات UUID المضغوطة |
BLOB / LONGBLOB | 64 كيلوبايت / 4 جيجابايت | 2 بايت / 4 بايت (بايتات خام) | لا (بايتات ثنائية خام) | الحمولات المشفرة والشهادات والبيانات الثنائية |
ENUM / SET | 65,535 خياراً / 64 عضواً | فهرس 1–2 بايت / قناع 1–8 بايت | نعم (يخضع لقواعد المقارنة) | حالات سير العمل الثابتة (draft، published) |
ملخص الدرس: أتقنّا في هذا الدرس أنواع البيانات النصية والثنائية في MySQL 8، وقارنّا السلاسل الثابتة CHAR والمتغيرة VARCHAR، وفحصنا ترميز utf8mb4 وقواعد المقارنة، إلى جانب عائلات TEXT وBLOB وBINARY والتعداد ENUM وSET.
الخطوة التالية والدرس القادم: في الدرس القادم سنتناول أنواع بيانات التاريخ والوقت والطابع الزمني في MySQL، بما يشمل DATE وTIME والفرق الجوهري بين DATETIME وTIMESTAMP ودقة أجزاء الثانية.
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنّا في هذا الدرس أنواع البيانات النصية والثنائية في MySQL 8، وقارنّا السلاسل الثابتة CHAR والمتغيرة VARCHAR، وفحصنا ترميز utf8mb4 وقواعد المقارنة، إلى جانب عائلات TEXT وBLOB وBINARY والتعداد ENUM وSET. الخطوة التالية: في الدرس القادم سنتناول أنواع بيانات التاريخ والوقت والطابع الزمني في MySQL، بما يشمل DATE وTIME والفرق الجوهري بين DATETIME وTIMESTAMP ودقة أجزاء الثانية.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 String Types الأنواع النصية
- تعلّم أنواع البيانات النصية والثنائية والتعداد في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
- للمراجعة
- 02 Fixed and Variable Strings السلاسل الثابتة والمتغيرة الطول
- المفهوم الهندسي الأساسي لقسم السلاسل الثابتة والمتغيرة الطول في قواعد بيانات MySQL 8 الحديثة.
- للمراجعة
- 03 Character Sets and Collations ترميز الحروف وقواعد المقارنة
- الصياغة القياسية وقواعد التنفيذ العملي لقسم ترميز الحروف وقواعد المقارنة.
- للمراجعة
- 04 Long Text Storage Types أنواع النصوص الطويلة وتخزينها
- آلية التخزين وأفضل ممارسات محرك InnoDB الخاصة بقسم أنواع النصوص الطويلة وتخزينها.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات2
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 UTF8MB4 UTF8MB4
- UTF-8 Multibyte 4-Byte Character Encoding
- الترميز الافتراضي في MySQL 8 الداعم لكامل محارف يونيكود بما فيها العربية والرموز التعبيرية بتمثيل من 1 إلى 4 بايت للحرف.
- للمراجعة
- 02 BLOB BLOB
- Binary Large Object
- عائلة أنواع البيانات المخصصة لحفظ الكائنات الثنائية الخام كبيرة الحجم دون إخضاعها لترميز الحروف النصية.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
افتح عميل MySQL 8 المحلي ونفّذ استعلام SQL المشروح في قسم السلاسل الثابتة والمتغيرة الطول للتحقق من النتائج.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم ترميز الحروف وقواعد المقارنة وقارن مخرجات MySQL 8.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي4 أسئلة تنتظرك +
أي دالة في SQL تُرجع عدد الحروف الفعلية في السلسلة النصية بدلاً من حجمها بالبايت؟
فرّق بين حساب عدد المحارف وحجم البايتات في النصوص متعددة البايت.
ما هو الحد الأقصى لعدد البايتات للحرف الواحد في نظام الترميز utf8mb4 داخل MySQL 8؟
تذكّر سبب اعتماد utf8mb4 بديلاً عن الترميز القديم ثلاثي البايت.
أي نوع بيانات هو الأمثل لتخزين بصمة SHA-256 الثنائية الخام بحجم 32 بايت دون عبء ترميز الحروف؟
اختر النوع الثنائي ثابت الطول المخصص لمصفوفات البايتات الخام.
كيف تخزّن MySQL قيمة حقل من نوع ENUM داخلياً على القرص؟
حدّد طريقة التمثيل الرقمي الداخلي لخيارات التعداد.