mysql - यूटीएफ-8: सामान्य? बिन? यूनिकोड?




utf-8 collation (3)

मैं यह समझने की कोशिश कर रहा हूं कि विभिन्न प्रकार के डेटा के लिए मुझे किस संयोजन का उपयोग करना चाहिए। सामग्री का 100% मैं संग्रहित करूँगा उपयोगकर्ता द्वारा सबमिट किया गया है।

मेरी समझ यह है कि मुझे यूटीएफ -8 बाइनरी के बजाय यूटीएफ -8 जनरल सीआई (केस-असंवेदनशील) का उपयोग करना चाहिए। हालांकि, मुझे यूटीएफ -8 जनरल सीआई और यूटीएफ -8 यूनिकोड सीआई के बीच एक अंतर स्पष्ट नहीं मिल रहा है।

  1. क्या मुझे यूटीएफ -8 जनरल या यूटीएफ -8 यूनिकोड सीआई कॉलम में उपयोगकर्ता द्वारा सबमिट की गई सामग्री को संग्रहीत करना चाहिए?
  2. यूटीएफ -8 बाइनरी किस प्रकार का डेटा लागू होगा?

असल में, मैंने अद्वितीय इंडेक्स के साथ कॉलम में 'é' और 'e' जैसे बचत मूल्यों का परीक्षण किया और वे 'utf8_unicode_ci' और 'utf8_general_ci' दोनों पर डुप्लिकेट त्रुटि का कारण बनते हैं। आप उन्हें केवल 'utf8_bin' कॉलम कॉलम में सहेज सकते हैं।

और mysql दस्तावेज़ ( http://dev.mysql.com/doc/refman/5.7/en/charset-applications.html ) अपने उदाहरणों में 'utf8_general_ci' संयोजन सेट करते हैं।

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

आपको इस तथ्य से अवगत होना चाहिए कि utch8_general_ci के साथ वर्चर फ़ील्ड का उपयोग करते समय अनन्य या प्राथमिक इंडेक्स के रूप में 'ए' और 'á' जैसे 2 मान डालने से डुप्लिकेट कुंजी त्रुटि मिलती है।


  • utf8_bin बिट्स को utf8_bin तुलना करता है। कोई मामला तह नहीं, कोई उच्चारण अलग नहीं है।
  • utf8_general_ci एक बाइट के साथ एक बाइट की तुलना करता है। यह केस फोल्डिंग और उच्चारण स्ट्रिपिंग करता है, लेकिन 2-वर्ण तुलना नहीं: ij इस संयोजन में बराबर नहीं है ij
  • utf8_*_ci भाषा-विशिष्ट नियमों का एक सेट है, लेकिन अन्यथा unicode_ci तरह। कुछ विशेष मामले: Ç , Ç , ch , ll
  • utf8_unicode_ci तुलना के लिए पुराने यूनिकोड मानक का पालन करता है। ij = ij , लेकिन ae ! = æ
  • utf8_unicode_520_ci एक नए यूनिकोड मानक का पालन करता है। ae = æ

विभिन्न utf8 collations में क्या है के बराबर के विवरण के लिए collation चार्ट देखें।

utf8 , जैसा कि MySQL द्वारा परिभाषित किया गया है 1- से 3-बाइट utf8 कोड तक सीमित है। यह इमोजी और कुछ चीनी छोड़ देता है। तो अगर आप यूरोप से ज्यादा जाना चाहते हैं तो आपको वास्तव में utf8mb4 स्विच करना चाहिए।

उपयुक्त वर्तनी परिवर्तन के बाद उपर्युक्त बिंदु utf8mb4 लागू होते हैं। आगे बढ़ते हुए, utf8mb4 और utf8mb4_unicode_520_ci को प्राथमिकता दी जाती है।

  • utf16 और utf32 utf8 पर वेरिएंट हैं; उनके लिए वस्तुतः कोई उपयोग नहीं है।
  • ucs2 "utf8" से "यूनिकोड" के करीब है; इसके लिए वस्तुतः कोई उपयोग नहीं है।




collation