utf8_general_ci एक बहुत ही सरल है - और यूनिकोड पर, बहुत टूटा हुआ - संयोजन, जो गलत परिणाम देता है सामान्य यूनिकोड पाठ पर। यह क्या करता है:
- विहित अपघटन के लिए यूनिकोड सामान्यीकरण फॉर्म डी में कनवर्ट करता है
- किसी भी संयोजन वर्ण को हटाता है
- अपर केस में कनवर्ट करता है
यह यूनिकोड पर ठीक से काम नहीं करता है, क्योंकि यह यूनिकोड केसिंग को नहीं समझता है। एएससीआईआई-दिमाग वाले दृष्टिकोण को संभालने की तुलना में यूनिकोड केसिंग अकेले बहुत अधिक जटिल है। उदाहरण के लिए:
- "ẞ" का निचला अक्षर "ß" है, लेकिन "ß" का अपरकेस "SS" है।
- दो लोअरकेस ग्रीक सिग्मा हैं, लेकिन केवल एक अपरकेस एक; "Σίσυφος" पर विचार करें।
- "ø" जैसे अक्षर "o" प्लस एक विशेषक में विघटित नहीं होते, जिसका अर्थ है कि यह सही ढंग से क्रमबद्ध नहीं होगा।
और भी कई बारीकियां हैं।
utf8_unicode_ciमानक यूनिकोड कोलेशन एल्गोरिथम का उपयोग करता है , तथाकथित विस्तार और संयुक्ताक्षर का समर्थन करता है, उदाहरण के लिए:जर्मन अक्षर ß (U+00DF LETTER SHARP S) को "ss" के पास क्रमबद्ध किया जाता है पत्र Œ (U+0152 लैटिन कैपिटल LIGATURE OE) को "OE" के पास सॉर्ट किया जाता है।
utf8_general_ci विस्तार/संयुक्ताक्षर का समर्थन नहीं करता है, यह इन सभी अक्षरों को एकल वर्णों के रूप में, और कभी-कभी गलत क्रम में क्रमबद्ध करता है।
utf8_unicode_ciआम तौर पर . है सभी लिपियों के लिए अधिक सटीक। उदाहरण के लिए, सिरिलिक ब्लॉक पर:utf8_unicode_ciइन सभी भाषाओं के लिए ठीक है:रूसी, बल्गेरियाई, बेलारूसी, मैसेडोनियन, सर्बियाई और यूक्रेनी। जबकि utf8_general_ci केवल सिरिलिक के रूसी और बल्गेरियाई उपसमुच्चय के लिए ठीक है। बेलारूसी, मैसेडोनियन, सर्बियाई और यूक्रेनी में उपयोग किए जाने वाले अतिरिक्त अक्षर ठीक नहीं हैं।
utf8_unicode_ci . की लागत क्या यह एक छोटा है utf8_general_ci . से थोड़ा कम . लेकिन यही वह कीमत है जिसे आप शुद्धता के लिए भुगतान करते हैं। या तो आपके पास एक तेज़ उत्तर हो सकता है जो गलत है, या एक बहुत ही धीमा उत्तर जो सही है। आपकी पसंद। कभी भी गलत उत्तरों को सही ठहराना बहुत मुश्किल है, इसलिए यह मान लेना सबसे अच्छा है कि utf8_general_ci मौजूद नहीं है और हमेशा utf8_unicode_ci use का उपयोग करने के लिए . ठीक है, जब तक आप गलत उत्तर नहीं चाहते।
स्रोत:https://forums.mysql.com/read .php?103,187048,188748#msg-188748