مقدمة: لماذا اختيار collation في MySQL ليس مجرد رفاهية
\nكل من قام بإعداد قاعدة بيانات لمشروع PHP واجه سؤالًا: "أي collation (مقارنة/ترتيب) يجب أن أختار؟". في Stack Overflow، حصد هذا السؤال آلاف المشاهدات، وغالبًا ما تربك الإجابات المبتدئين. للوهلة الأولى، قد يبدو أنه لا فرق — المهم أن تعمل. لكن في الواقع، يؤثر اختيار collation على سرعة البحث، ودقة الترتيب (خاصة مع اللغة العربية)، وحتى على كيفية عرض الرموز الخاصة.
\nفي هذا الدليل، سنفهم أي collation لـ MySQL مع PHP هي الأفضل في 2025، ولماذا. ستتعلم كيف تتجنب الأخطاء الشائعة وتضبط قاعدة بياناتك ليكون موقعك سريعًا وبياناتك خالية من التشوهات.
\n\nما هو collation بلغة بسيطة؟
\nCollation (المقارنة) هي مجموعة من القواعد التي يستخدمها MySQL لمقارنة وترتيب النصوص. ترتبط ارتباطًا وثيقًا بالترميز (charset). إذا كان الترميز (مثل utf8mb4) مسؤولًا عن كيفية تخزين الأحرف، فإن collation تحدد كيفية مقارنتها: هل تراعي حالة الأحرف؟ كيف ترتب حرفي "أ" و "إ"؟ هل تعتبر "A" و "a" متطابقين؟
الأنواع الرئيسية لـ collation الخاصة بـ utf8mb4:
- \n
- utf8mb4_general_ci — قديمة، سريعة، لكن بترتيب مبسط (لا تعالج بعض اللغات بدقة). \n
- utf8mb4_unicode_ci — أكثر دقة، مبنية على معيار Unicode، لكنها كانت أبطأ قبل MySQL 8.0. \n
- utf8mb4_0900_ai_ci — الأحدث (MySQL 8.0+)، الأكثر دقة وسرعة في نفس الوقت. \n
لماذا لا يجب استخدام collation القديمة؟
\nلا تزال العديد من المشاريع القديمة تستخدم utf8_general_ci أو حتى latin1_swedish_ci. إذا كنت تكتب مشروعًا جديدًا بلغة PHP، فتجنبها تمامًا. إليك الأسباب:
- \n
- مشاكل مع اللغة العربية: قد لا يتم ترتيب الأحرف مثل "أ" و "إ" بشكل صحيح. \n
- مجموعة أحرف محدودة: الترميزات القديمة لا تدعم الرموز التعبيرية (emojis) والأحرف النادرة. \n
- الأداء: collation الحديثة محسّنة وتعمل بشكل أسرع. \n
أفضل collation في 2025: utf8mb4_0900_ai_ci
\nإذا كان إصدار MySQL لديك 8.0 أو أعلى (وهو الغالب الآن)، فإن الخيار الأفضل هو utf8mb4_0900_ai_ci. شرح التسمية:
\n- \n
- utf8mb4 — ترميز يدعم 4 بايت لكل حرف (الرموز التعبيرية، الحروف الهيروغليفية النادرة). \n
- 0900 — مبني على معيار Unicode 9.0 (أحدث إصدار). \n
- ai — accent insensitive (غير حساس للتشكيل: "café" و "cafe" متساويان). \n
- ci — case insensitive (غير حساس لحالة الأحرف: "Hello" و "hello" متساويان). \n
توفر هذه collation أقصى دقة وسرعة. إذا كنت بحاجة للتمييز بين حالة الأحرف أو التشكيل، استخدم utf8mb4_0900_as_cs، لكن بالنسبة لـ 99% من مشاريع الويب، ai_ci هو الخيار الأمثل.
ماذا لو كان لدي MySQL 5.7 أو أقل؟
\nفي هذه الحالة، خيارك هو utf8mb4_unicode_520_ci (أو ببساطة utf8mb4_unicode_ci). إنها ليست بنفس سرعة 0900، لكنها أكثر دقة بكثير من general_ci. إذا كان لديك إصدار قديم — قم بالتحديث فورًا، ولكن في الوقت الحالي، استخدم utf8mb4_unicode_ci.
دليل خطوة بخطوة: إعداد collation في مشروع PHP
\nدعنا نضبط قاعدة البيانات بشكل صحيح. سأشرح باستخدام PDO — الطريقة الحديثة والآمنة للعمل مع MySQL في PHP.
\n\nالخطوة 1: إنشاء قاعدة بيانات بالـ collation الصحيحة
\nنفّذ استعلام SQL التالي (عبر phpMyAdmin أو وحدة التحكم):
\nCREATE DATABASE my_database\n CHARACTER SET utf8mb4\n COLLATE utf8mb4_0900_ai_ci;\n\nالخطوة 2: إعداد الاتصال في PHP (PDO)
\nعند الاتصال بقاعدة البيانات، تأكد من تحديد الترميز والـ collation في خيارات الاتصال: