في هذا الدرس 6تصفّح المواضيع
يتحكم إعدادان متكاملان في كيفية تخزين النصوص ومقارنتها وترتيبها داخل خادم MySQL 8.4:
- مجموعة الأحرف (
CHARACTER SET): هي جدول الترميز الذي يحدد الرموز المسموح بها وكيفية تمثيل كل حرف بسلسلة بايتات ثنائية على القرص. - قاعدة المقارنة والترتيب (
COLLATE): هي القواعد اللغوية التي تحدد كيف تُقارن الأحرف وتُرتب أبجدياً (مثل حساسية الأحرف الكبيرة والصغيرة، أو حساسية الهمزات والتشكيل في اللغة العربية).
-- 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بديلاً قياسياً.
-- 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).
-- 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(مقارنة ثنائية بالبايت): تقارن قيم البايتات الخام مباشرة بأقصى سرعة للرموز السرية والمعرفات الدقيقة.
-- 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 لضمان ثبات السلوك على جميع الخوادم السحابية:
-- 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 الأقدم |
-- 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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 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).
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
نفّذ أمثلة SQL المشروحة في قسم الفرق بين الترميز والمقارنة على خادم MySQL 8 المحلي وتحقق من النتيجة.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم مشكلة ترميز utf8mb3 القديم وقارن مخرجات خادم MySQL.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي7 أسئلة تنتظرك +
ما الفرق الدقيق بين مجموعة الأحرف (Character Set) وقاعدة المقارنة (Collation) في MySQL؟
تحدد مجموعة الأحرف كيفية تمثيل الأحرف وتخزينها بالبايتات، بينما تحدد قاعدة المقارنة قواعد مقارنة تلك الأحرف وترتيبها أبجدياً.
ما أقصى عدد بايتات للحرف الواحد يدعمه ترميز utf8mb4 مقارنةً بترميز utf8mb3 القديم؟
يدعم ترميز utf8mb4 حتى 4 بايتات للحرف الواحد، بينما يتوقف utf8mb3 المهجور عند 3 بايتات فقط.
في ترميز utf8mb4، يستهلك كل حرف إنجليزي (ASCII) أربعة بايتات كاملة على القرص دائماً.
خطأ؛ ترميز utf8mb4 متغير الطول (من 1 إلى 4 بايتات)، فالحرف الإنجليزي يستهلك بايتاً واحداً فقط، والحرف العربي بايتين.
ما الفرق بين دالة CHAR_LENGTH(str) ودالة LENGTH(str) في MySQL؟
تُرجع CHAR_LENGTH() عدد الأحرف المنطقية، بينما تُرجع LENGTH() الحجم الفعلي بالبايتات.
إلى ماذا ترمز اللاحقتان _ai_ci في قاعدة المقارنة الافتراضية utf8mb4_0900_ai_ci؟
ترمز ai إلى عدم الحساسية للتشكيل والهمزات (Accent-Insensitive)، وترمز ci إلى عدم الحساسية لحالة الأحرف (Case-Insensitive).
أي من العبارات التالية صحيحة حول قواعد المقارنة utf8mb4_0900_ai_ci و as_cs و bin؟ (اختر كل ما ينطبق)
المقارنة ai_ci مرنة في البحث، والمقارنة as_cs حساسة للتشكيل وحالة الأحرف، والمقارنة bin تقارن البايتات الثنائية مباشرة.
أي جملة SQL تنشئ قاعدة بيانات باسم closetag_global بترميز UTF-8 الكامل ذي 4 بايتات ومقارنة UCA 9.0.0 الافتراضية؟
تحدد العبارة CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci الترميز والمقارنة القياسية صراحةً عند الإنشاء.