مؤشر MySQL الفريد لا يعمل على أملاوت معينة
-
29-09-2020 - |
سؤال
لدي طاولة مستخدمين يوجد فيها عمود يسمى "LickName"، UTF-8 المشفرة، varchar (20)، الجدول في InnoDB.هناك 2 سجل واحد لديه اسم مستعار="gunni" واللقب الآخر= 'günni'.عندما حاولت تطبيق فهرس فريد على هذا العمود، أعطاني MySQL هذا الخطأ:
الخطأ 1062 (23000) في السطر 263: الإدخال المكرر 'gunni' للمفتاح 2
راجعت البيانات هناك سجل واحد فقط يحتوي على اسم "Gunni"، وإذا قمت بتغيير سجل "Günni" إلى شيء آخر، فقم بتطبيق الفهرس الفريد مرة أخرى، كل شيء يعمل بشكل جيد.
كيف تأتي "Günni" & "gunni"؟فيما يلي قيم عرافة لهم، أحصل على هذا مع وظيفة HEX () MySQL ():
gunni -> 677566E69
günni -> 67C3BC6E6E69
من الواضح أنهم مختلفون.كيف تعامل mysql يعامل هذه 2 كما هو نفسه؟أم أن هناك شيء لا أعرفه عن فهارس فريدة من نوعها؟أو حتى، هل يمكن أن يكون هذا خطأ mysql؟
المحلول
بسبب الترتيب الذي تستخدمه.
أي شيء ينتهي مع _ci غير حساس لحالة الأحرف (وأيضا غير حساس لهجة / UMLAUT).لذلك نعم، سوف تنظر MySQL في "Günni" و "Gunni" نفس الشيء، إلا إذا قمت بتغيير ترتيبك.
المستندات: http://dev.mysql.com/الوثيقة / refman / 5.0 / en / charset-table.html