ما الفرق بين utf8_general_ci و utf8_unicode_ci و utf8_binary collation في MySQL؟


الاجابه 1:

عمليات الترتيب الثلاثة التي ذكرتها كلها لترميز أحرف UTF-8. الاختلافات بين كل منها في كيفية فرز النص ومقارنته.

تحتوي كل مجموعة أحرف على ترتيب واحد هو الترتيب الافتراضي. على سبيل المثال ، الترتيب الافتراضي لـ latin1 هو latin1_swedish_ci. يشير الإخراج الخاص بـ SHOW CHARACTER SET إلى الترتيب الذي هو الافتراضي لكل مجموعة أحرف معروضة.

هنا الإخراج في عميل قاعدة البيانات الخاص بي ، Navicat Premium:

هناك اصطلاح لأسماء الترتيب: وهي تبدأ باسم مجموعة الأحرف التي ترتبط بها ، وعادة ما تتضمن اسم اللغة ، وتنتهي بـ _ci (حساس لحالة الأحرف) أو _cs (حساس لحالة الأحرف) أو _bin (ثنائي ).

في الحالات التي تحتوي فيها مجموعة أحرف على عمليات ترتيب متعددة ، قد لا يكون من الواضح أي الترتيب هو الأنسب لتطبيق معين. لتجنب اختيار الترتيب غير الصحيح ، قد يكون من المفيد إجراء بعض المقارنات مع قيم البيانات التمثيلية للتأكد من أن ترتيب محدد يعيّن الطريقة التي تتوقعها.

يمكنك اختيار مجموعة الأحرف والمقارنة في Navicat في شاشات إنشاء وتحرير قاعدة البيانات:

منذ MySQL 5.5.3 ، يجب عليك استخدام utf8mb4 بدلاً من utf8. يشير كلاهما إلى ترميز UTF-8 ، لكن utf8 الأقدم كان له قيود خاصة بـ MySQL تمنع استخدام الأحرف المرقمة أعلاه 0xFFFD.

الاختلافات الرئيسية

  • تستند utf8mb4_unicode_ci إلى قواعد Unicode الرسمية للفرز والمقارنة العالميين ، والتي تفرز بدقة في مجموعة واسعة من اللغات .utf8mb4_general_ci عبارة عن مجموعة مبسطة من قواعد الفرز التي تهدف إلى القيام بها بقدر الإمكان مع اتخاذ العديد من الاختصارات المصممة لتحسين سرعة. لا يتبع قواعد Unicode وسيؤدي إلى فرز أو مقارنة غير مرغوب فيهما في بعض الحالات ، مثل عند استخدام لغات أو أحرف معينة. على الخوادم الحديثة ، سيكون تعزيز الأداء هذا ضئيلًا للغاية. تم تصميمه في وقت كانت فيه الخوادم جزءًا صغيرًا من أداء وحدة المعالجة المركزية لأجهزة الكمبيوتر الحالية.

امل ان يساعد!

آدم