فهم حساسية حالة الأحرف في MySQL
يبدو أن استعلام MySQL الخاص بك باستخدام عامل التشغيل LIKE يظهر حساسية لحالة الأحرف، على الرغم من ترميز الجدول الخاص بك كـ utf8_general_ci مع محرك التخزين MyISAM. يمكن أن يكون هذا السلوك محيرًا، وفهم السبب الأساسي أمر بالغ الأهمية لحل المشكلة.مقارنة السلاسل الثنائية مقابل غير الثنائية:
المفتاح لفهم هذا يكمن السلوك في التمييز بين مقارنة السلسلة الثنائية وغير الثنائية. بشكل افتراضي، يقوم MySQL بإجراء مقارنة سلاسل غير ثنائية، وهي حساسة لحالة الأحرف لمعظم مجموعات الأحرف، بما في ذلك utf8_general_ci.
إصلاح حساسية حالة الأحرف باستخدام المقارنة الثنائية:لحل مشكلة حساسية حالة الأحرف، يمكنك تعديل الاستعلام الخاص بك لاستخدام مقارنة السلسلة الثنائية. يتم تحقيق ذلك عن طريق بادئة المعامل الأيمن لعامل التشغيل LIKE بالكلمة الأساسية BINARY. سيبدو الاستعلام المصحح كما يلي:
SELECT concat_ws(title,description) على أنه متسلسل HAVING متسلسل LIKE BINARY '%SearchTerm%';
SELECT concat_ws(title,description) as concatenated HAVING concatenated LIKE BINARY '%SearchTerm%';الحل البديل باستخدام COLLATE:
هناك طريقة بديلة لتحقيق مقارنة سلسلة غير حساسة لحالة الأحرف وهي استخدام جملة COLLATE. تحدد جملة COLLATE مجموعة الأحرف وقواعد الترتيب التي سيتم تطبيقها على مقارنة السلسلة. من خلال تحديد ترتيب utf8_bin، يمكنك إجبار MySQL على استخدام مقارنة السلاسل الثنائية. سيكون الاستعلام باستخدام COLLATE:
SELECT .... من .... حيث يتم تجميع `متسلسل` مثل '%SearchTerm%' utf8_bin;
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3