انتقل إلى محتوى الدرس
الدرس 06
دورة MySQL

ترميز الأحرف والمقارنات النصية UTF8MB4 في MySQLMySQL Character Sets and UTF8MB4 Collations

أتقن ترميز الأحرف والمقارنات النصية UTF8MB4 في MySQL 8 الحديث لدعم النصوص العربية واللغات العالمية والرموز التعبيرية بكفاءة.
أقسام الدرس
6
الأمثلة
6
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
8
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

يتحكم إعدادان متكاملان في كيفية تخزين النصوص ومقارنتها وترتيبها داخل خادم MySQL 8.4:

  • مجموعة الأحرف (CHARACTER SET): هي جدول الترميز الذي يحدد الرموز المسموح بها وكيفية تمثيل كل حرف بسلسلة بايتات ثنائية على القرص.
  • قاعدة المقارنة والترتيب (COLLATE): هي القواعد اللغوية التي تحدد كيف تُقارن الأحرف وتُرتب أبجدياً (مثل حساسية الأحرف الكبيرة والصغيرة، أو حساسية الهمزات والتشكيل في اللغة العربية).
مخطط يقارن بين ترميز utf8mb4 الكامل ذي 4 بايتات وترميز utf8mb3 القديم وقواعد المقارنة النصية في MySQL 8.4
SQL
-- Inspect the default server character set and collation
SELECT
  @@character_set_server,
  @@collation_server;

في الإصدارات القديمة من MySQL، كان الاسم utf8 يشير فعلياً إلى ترميز ناقص يسمى utf8mb3 يقبل 3 بايتات كحد أقصى للحرف الواحد:

  • الفشل مع الرموز ذات 4 بايتات: يحتاج معيار UTF-8 القياسي إلى 4 بايتات لتمثيل الرموز التعبيرية (Emojis) والرموز الإضافية؛ ولذلك يفشل utf8mb3 بالخطأ ERROR 1366: Incorrect string value فور إدخال أي رمز رباعي البايتات.
  • ترميز مهجور رسمياً: يصنف إصدار MySQL 8.4 ترميز utf8mb3 كترميز مهجور (Deprecated) ويعتمد utf8mb4 بديلاً قياسياً.
SQL
-- List all character sets and their maximum byte length (Maxlen)
SHOW CHARACTER SET;

في إصداري MySQL 8.0 و 8.4 LTS، يُعد utf8mb4 الترميز الافتراضي للخادم وتُعد utf8mb4_0900_ai_ci قاعدة المقارنة الافتراضية، ومن المهم التفرقة بين دالتي قياس النصوص:

  • الدالة CHAR_LENGTH(str): تحسب عدد الأحرف المنطقية في النص بغض النظر عن عدد البايتات.
  • الدالة LENGTH(str): تحسب الحجم الفعلي بالبايتات الذي يشغله النص (فالكلمة العربية المكونة من 5 أحرف تعطي 5 في CHAR_LENGTH وتعطي 10 بايتات في LENGTH).
SQL
-- Compare character count vs byte length in utf8mb4
SELECT
  CHAR_LENGTH('CloseTag') AS ascii_chars,
  LENGTH('CloseTag') AS ascii_bytes,
  CHARSET('CloseTag') AS active_charset;

يساعدك فهم لواحق أسماء المقارنة في MySQL 8.4 على ضبط دقة البحث في النصوص العربية والإنجليزية:

  • اللاحقة _ai_ci (غير حساس للتشكيل ولا لحالة الأحرف): تعتبر أشكال الألف المهموزة والعادية وحركات التشكيل متكافئة عند البحث العربي، كما تتجاهل فرق الأحرف الإنجليزية الكبيرة والصغيرة.
  • اللاحقة _as_cs (حساس للتشكيل وحالة الأحرف): تفرّق بصرامة بين الحروف المهموزة وغير المهموزة وبين الأحرف الإنجليزية الكبيرة والصغيرة.
  • اللاحقة _bin (مقارنة ثنائية بالبايت): تقارن قيم البايتات الخام مباشرة بأقصى سرعة للرموز السرية والمعرفات الدقيقة.
SQL
-- Compare case and accent sensitivity across 0900 collations
SELECT
  ('CloseTag' = 'closetag' COLLATE utf8mb4_0900_ai_ci) AS ci_eq,
  ('CloseTag' = 'closetag' COLLATE utf8mb4_0900_as_cs) AS cs_eq,
  ('CloseTag' = 'closetag' COLLATE utf8mb4_0900_bin) AS bin_eq;

على الرغم من أن خادم MySQL 8.4 يعتمد utf8mb4 افتراضياً، إلا أن أفضل الممارسات الهندسية تقتضي كتابة CHARACTER SET utf8mb4 وCOLLATE utf8mb4_0900_ai_ci صراحةً داخل أمر CREATE DATABASE لضمان ثبات السلوك على جميع الخوادم السحابية:

SQL
-- Explicitly define utf8mb4 and UCA 9.0.0 collation on creation
CREATE DATABASE IF NOT EXISTS closetag_global
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_0900_ai_ci;

SHOW CREATE DATABASE closetag_global;

يقارن الجدول المرجعي التالي بين أشهر قواعد المقارنة النصية لترميز utf8mb4 في MySQL 8.4:

اسم قاعدة المقارنةحساسية حالة الأحرفحساسية التشكيل والهمزاتالاستخدام الهندسي الموصى به
utf8mb4_0900_ai_ciغير حساس (ci)غير حساس (ai)الافتراضي الموصى به لتطبيقات الويب والبحث العربي والإنجليزي المرن
utf8mb4_0900_as_csحساس (cs)حساس (as)المطابقة الحرفية الصارمة للتشكيل والهمزات وحالة الأحرف
utf8mb4_0900_as_ciغير حساس (ci)حساس (as)تجاهل حالة الأحرف الإنجليزية مع تمييز الهمزات والتشكيل
utf8mb4_0900_binمطابقة ثنائية بالبايتمطابقة ثنائية بالبايتالرموز السرية (Tokens) والمعرفات الحساسة لحالة الأحرف
utf8mb4_unicode_ciغير حساس (ci)غير حساس (ai)التوافق مع خوادم MySQL 5.7 الأقدم
SQL
-- List all available collations compiled into the MySQL server
SHOW COLLATION;
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس الفرق بين مجموعة الأحرف CHARACTER SET وقاعدة المقارنة COLLATE، وسبب استبدال utf8mb3 القديم بترميز utf8mb4 الكامل ذي 4 بايتات، والفرق بين CHAR_LENGTH() وLENGTH()، ومتى نستخدم كلاً من utf8mb4_0900_ai_ci وas_cs وbin.

الخطوة التالية والدرس القادم

انتقل الآن إلى الدرس السابع «تعديل خصائص قواعد البيانات وحذفها بأمان في MySQL» لتعلم أوامر ALTER DATABASE وقفل القراءة فقط READ ONLY والحذف الآمن عبر DROP DATABASE IF EXISTS.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 UTF8MB4 Charset ترميز UTF8MB4
أتقن ترميز الأحرف والمقارنات النصية UTF8MB4 في MySQL 8 الحديث لدعم النصوص العربية واللغات العالمية والرموز التعبيرية بكفاءة.
للمراجعة
02 Character Sets vs Collations الفرق بين الترميز والمقارنة
المفهوم الهندسي والتطبيق العملي المباشر لقسم الفرق بين الترميز والمقارنة في MySQL 8.4.
للمراجعة
03 Why Legacy utf8mb3 Fails مشكلة ترميز utf8mb3 القديم
المفهوم الهندسي والتطبيق العملي المباشر لقسم مشكلة ترميز utf8mb3 القديم في MySQL 8.4.
للمراجعة
04 Modern utf8mb4 Standard الترميز القياسي الحديث utf8mb4
المفهوم الهندسي والتطبيق العملي المباشر لقسم الترميز القياسي الحديث utf8mb4 في MySQL 8.4.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 UTF-8 UTF-8
8-Bit Unicode Transformation Format
ترميز يونيكود القياسي متغير الطول (من 1 إلى 4 بايتات) لتمثيل جميع لغات العالم والرموز.
للمراجعة
02 UCA UCA
Unicode Collation Algorithm
خوارزمية ترتيب ومقارنة نصوص يونيكود القياسية (الإصدار 9.0.0 في MySQL 8).
للمراجعة
03 AI / CI AI / CI
Accent-Insensitive / Case-Insensitive
لواحق تشير إلى عدم الحساسية للتشكيل والهمزات (ai) وعدم الحساسية لحالة الأحرف (ci).
للمراجعة
04 AS / CS AS / CS
Accent-Sensitive / Case-Sensitive
لواحق تشير إلى الحساسية الصارمة للتشكيل والهمزات (as) ولحالة الأحرف الكبيرة والصغيرة (cs).
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. نفّذ أمثلة SQL المشروحة في قسم الفرق بين الترميز والمقارنة على خادم MySQL 8 المحلي وتحقق من النتيجة.

  2. بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم مشكلة ترميز utf8mb3 القديم وقارن مخرجات خادم MySQL.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

7أسئلة 3أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي7 أسئلة تنتظرك
01

ما الفرق الدقيق بين مجموعة الأحرف (Character Set) وقاعدة المقارنة (Collation) في MySQL؟

تحدد مجموعة الأحرف كيفية تمثيل الأحرف وتخزينها بالبايتات، بينما تحدد قاعدة المقارنة قواعد مقارنة تلك الأحرف وترتيبها أبجدياً.

02

ما أقصى عدد بايتات للحرف الواحد يدعمه ترميز utf8mb4 مقارنةً بترميز utf8mb3 القديم؟

يدعم ترميز utf8mb4 حتى 4 بايتات للحرف الواحد، بينما يتوقف utf8mb3 المهجور عند 3 بايتات فقط.

03

في ترميز utf8mb4، يستهلك كل حرف إنجليزي (ASCII) أربعة بايتات كاملة على القرص دائماً.

خطأ؛ ترميز utf8mb4 متغير الطول (من 1 إلى 4 بايتات)، فالحرف الإنجليزي يستهلك بايتاً واحداً فقط، والحرف العربي بايتين.

04

ما الفرق بين دالة CHAR_LENGTH(str) ودالة LENGTH(str) في MySQL؟

تُرجع CHAR_LENGTH() عدد الأحرف المنطقية، بينما تُرجع LENGTH() الحجم الفعلي بالبايتات.

05

إلى ماذا ترمز اللاحقتان _ai_ci في قاعدة المقارنة الافتراضية utf8mb4_0900_ai_ci؟

ترمز ai إلى عدم الحساسية للتشكيل والهمزات (Accent-Insensitive)، وترمز ci إلى عدم الحساسية لحالة الأحرف (Case-Insensitive).

06

أي من العبارات التالية صحيحة حول قواعد المقارنة utf8mb4_0900_ai_ci و as_cs و bin؟ (اختر كل ما ينطبق)

المقارنة ai_ci مرنة في البحث، والمقارنة as_cs حساسة للتشكيل وحالة الأحرف، والمقارنة bin تقارن البايتات الثنائية مباشرة.

07

أي جملة SQL تنشئ قاعدة بيانات باسم closetag_global بترميز UTF-8 الكامل ذي 4 بايتات ومقارنة UCA 9.0.0 الافتراضية؟

تحدد العبارة CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci الترميز والمقارنة القياسية صراحةً عند الإنشاء.