سؤال

يمكنني قراءة MySQL الوثائق وهذا واضح جدا. ولكن ، كيف يمكن للمرء أن يقرر أي حرف تعيين للاستخدام؟ على أي بيانات لها تأثير؟

أطلب شرحًا للاثنين وكيفية اختيارهما.

هل كانت مفيدة؟

المحلول

من MySQL مستندات:

أ مجموعة الأحرف هي مجموعة من الرموز والترميزات. أ التجميع هي مجموعة من القواعد لمقارنة الأحرف في مجموعة الأحرف. دعنا نوضح التمييز مع مثال على مجموعة الأحرف الخيالية.

لنفترض أن لدينا أبجدية بأربعة أحرف: "أ" ، "ب" ، "أ" ، "ب". نعطي كل حرف رقمًا: 'a' = 0 ، 'b' = 1 ، 'a' = 2 ، 'b' = 3. الحرف 'a' هو رمز ، الرقم 0 هو الترميز لـ 'a' ، والمزيج من الحروف الأربعة وترميزاتها هي مجموعة أحرف.

الآن ، لنفترض أننا نريد مقارنة قيمتين للسلسلة ، "A" و "B". أبسط طريقة للقيام بذلك هي النظر إلى الترميزات: 0 لـ "A" و 1 لـ "B". لأن 0 أقل من 1 ، نقول "A" أقل من "B". الآن ، ما فعلناه للتو هو تطبيق ترتيب على مجموعة الشخصيات لدينا. الترتيب عبارة عن مجموعة من القواعد (قاعدة واحدة فقط في هذه الحالة): "قارن الترميزات". نحن نسمي هذا أبسط من جميع المجموعات الممكنة ترتيب ثنائي.

ولكن ماذا لو أردنا أن نقول أن الأحرف الصغيرة والأحرف الكبيرة مكافئة؟ ثم سيكون لدينا قاعدتان على الأقل: (1) تعامل مع الأحرف الصغيرة "A" و "B" على أنها مكافئة لـ "A" و "B" ؛ (2) ثم قارن الترميزات. نحن نسمي هذا ترتيب غير حساس للحالة. إنه أكثر تعقيدًا بقليل من الترتيب الثنائي.

في الحياة الواقعية ، تحتوي معظم مجموعات الشخصيات على العديد من الشخصيات: ليس فقط "A" و "B" ولكن في بعض الأحيان الحروف الحرارية الكاملة ، وأحيانًا هتافات متعددة أو أنظمة الكتابة الشرقية مع آلاف الشخصيات ، إلى جانب العديد من الرموز الخاصة وعلامات الترقيم. في الحياة الحقيقية أيضًا ، تحتوي معظم المجموعات على العديد من القواعد: ليس فقط عدم حساسية الحالة ولكن أيضًا على وجود عدم حساسية (لهجة "هي علامة مرتبطة بشخصية كما في" ö "الألمانية) والتعيينات المتعددة (مثل القاعدة التي". Ö '=' oe 'في واحدة من اثنين من المجموعات الألمانية).

نصائح أخرى

أ تشفير الأحرف هي وسيلة لتشفير الأحرف بحيث تتلاءم مع الذاكرة. أي إذا كان charset هو ISO-8859-15 ، فسيتم ترميز رمز اليورو ، € ، على أنه 0xA4 ، وفي UTF-8 ، سيكون 0xE282AC.

ال التجميع هو كيفية مقارنة الشخصيات ، في Latin9 ، هناك رسائل مثل e é è ê f, ، إذا تم فرزها بواسطة تمثيلهم الثنائي ، فسوف يذهب e f é ê è ولكن إذا تم ضبط الترتيب على ، على سبيل المثال ، الفرنسية ، فستجعلها بالترتيب الذي تعتقد أنه سيكون عليه ، وهو كل شيء e é è ê متساوية ، ثم f.

مجموعة الأحرف هي مجموعة فرعية من جميع الحروف الرسومية المكتوبة. يحدد تشفير الأحرف كيفية تعيين هذه الأحرف إلى قيم رقمية. يمكن لبعض ترميزات الأحرف ، مثل UTF-8 و UTF-16 ، تشفير أي حرف في مجموعة الأحرف العالمية. يمكن للآخرين ، مثل US-ASCII أو ISO-8859-1 تشفير مجموعة فرعية صغيرة فقط ، لأنها تستخدم 7 و 8 بتات لكل حرف ، على التوالي. نظرًا لأن العديد من المعايير تحدد مجموعة الأحرف وترميز الأحرف ، فغالبًا ما يتم استبدال مصطلح "مجموعة الأحرف" بحرية لـ "تشفير الأحرف".

يشتمل الترتيب على قواعد تحدد كيفية مقارنة الأحرف للفرز. يمكن أن تكون قواعد التصنيفات محددة: الترتيب الصحيح لحرفتين يختلف من لغة إلى أخرى.

اختيار مجموعة الأحرف والترتيب يعود إلى ما إذا كان طلبك متلمسًا أم لا. إذا لم يكن الأمر كذلك ، فما هي اللغة التي تستهدفها؟

للاختيار ما هي الشخصية التي تريد دعمها ، يجب عليك التفكير في تطبيقك. إذا كنت تقوم بتخزين المدخلات التي يقدمها المستخدم ، فقد يكون من الصعب التنبؤ بجميع اللغات التي سيتم فيها استخدام برنامجك في النهاية. لدعمهم جميعًا ، قد يكون من الأفضل دعم UCS (Unicode) من البداية. ومع ذلك ، هناك تكلفة لهذا ؛ سوف تتطلب العديد من شخصيات أوروبا الغربية الآن بايتان من التخزين لكل حرف بدلاً من شخص واحد.

يمكن أن يساعد اختيار الترتيب الصحيح في الأداء إذا كانت قاعدة البيانات الخاصة بك تستخدم الترتيب لإنشاء فهرس ، ويستخدم لاحقًا هذا الفهرس لتوفير النتائج المرتبة. ومع ذلك ، نظرًا لأن قواعد الترتيب غالبًا ما تكون محددة محددة ، فإن هذا الفهرس سيكون لا قيمة له إذا كنت بحاجة إلى فرز النتائج وفقًا لقواعد لغة أخرى.

أقترح استخدام utf8mb4_unicode_ci, ، والذي يعتمد على معيار Unicode للفرز والمقارنة ، والذي ينفصل بدقة في مجموعة واسعة جدًا من اللغات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top