سؤال

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

mysql> select * from page where pageTitle="Something" Collate utf8_general_ci;

خطأ 1253 (42000): Collation 'utf8_general_ci' غير صالح لمجموعة الأحرف 'Latin1'

mysql> select * from page where pageTitle="Something" Collate latin1_general_ci;

خطأ 1267 (HY000): مزيج غير قانوني من الاشكلات (UTF8_BIN، ضمنية) و (Latin1_general_ci، صريح) للتشغيل "="

أنا جديد جدا على SQL، لذلك كنت أتساءل ما إذا كان يمكن لأي شخص المساعدة.

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

المحلول

سلسلة في mysql لديه مجموعة الأحرف والترتيب. وبعد UTF8 هي مجموعة الأحرف، و iutf8_bin هي واحدة من مجموعاتها. لمقارنة السلسلة الحرفية الخاصة بك إلى عمود UTF8، قم بتحويله إلى UTF8 عن طريق البادئة به باستخدام تدوين _charset:

_utf8 'Something'

الآن تجميع صالحة فقط لبعض مجموعات الأحرف. القضية-حساس يبدو أن Collation for UTF8 يكون utf8_bin، والذي يمكنك تحديده

_utf8 'Something' collate utf8_bin

مع هذه التحويلات، يجب أن يعمل الاستعلام:

select * from page where pageTitle = _utf8 'Something' collate utf8_bin

يعمل بادئة _charset مع حرفي السلسلة. لتغيير مجموعة الأحرف من الحقل، هناك تحويل ... باستخدام. هذا مفيد عندما ترغب في تحويل حقل Pagetitle إلى مجموعة أحرف أخرى، كما في:

select * from page 
where convert(pageTitle using latin1) collate latin1_general_cs = 'Something'

لرؤية الشخصية وترتيب عمود يدعى "col" في جدول يسمى "علامة التبويب"، حاول:

select distinct collation(col), charset(col) from TAB

يمكن العثور على قائمة بجميع مجموعات الأحرف والترصيات مع:

show character set
show collation

ويمكن العثور على جميع المجموعات الصحيحة ل UTF8 مع:

show collation where charset = 'utf8'

نصائح أخرى

يرجى أيضا ملاحظة أنه في حالة استخدام "Collate Utf8_general_ci" أو "Collate Latin1_general_ci"، أي "القوة" COLLATE - مثل هذه التحويل سيمنع من استخدام الفهارس الموجودة! قد يكون هذا عنق الزجاجة في المستقبل للأداء.

جرب هذا، والعمل بالنسبة لي

اختر من users حيث العلوي (name) = العلوي ('josé') collate utf8_bin؛

هل لي أن أسأل لماذا لديك حاجة لتغيير الترتيب الصريح عند القيام بتحديد؟ لماذا لا تتوصل فقط بالطريقة التي تريد استرداد السجلات عند فرزها؟

المشكلة التي تواجهها مع عمليات البحث الخاصة بك هي حساسة لحالة الأحرف هي أن لديك مجموعة ثنائية. حاول بدلا من ذلك استخدام الترتيب العام. لمزيد من المعلومات حول حساسية وحساسية الحالة، انظر هنا:حساسية الحالة في عمليات البحث السلسلة

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