UTF-8 एक चर-लंबाई एन्कोडिंग है। UTF-8 के मामले में, इसका मतलब है कि एक कोड बिंदु को संग्रहीत करने के लिए एक से चार बाइट्स की आवश्यकता होती है। हालाँकि, MySQL की एन्कोडिंग जिसे "utf8" ("utf8mb3" का उपनाम) प्रति कोड बिंदु पर अधिकतम तीन बाइट्स संग्रहीत करता है।
तो चरित्र सेट "utf8" / "utf8mb3" सभी यूनिकोड कोड बिंदुओं को संग्रहीत नहीं कर सकता है: यह केवल 0x000 से 0xFFFF की सीमा का समर्थन करता है, जिसे " बेसिक बहुभाषी विमान " कहा जाता है । यूनिकोड एनकोडिंग की तुलना भी देखें ।
यह वही है जो ( MySQL प्रलेखन में उसी पृष्ठ का एक पिछला संस्करण) इसके बारे में कहना है:
Utf8 [/ utf8mb3] नाम का वर्ण सेट प्रति वर्ण अधिकतम तीन बाइट्स का उपयोग करता है और इसमें केवल BMP वर्ण होते हैं। MySQL 5.5.3 के अनुसार, utf8mb4 वर्ण सेट अधिकतम चार बाइट्स प्रति वर्ण का उपयोग करता है जो पूरक वर्णों का समर्थन करता है:
BMP वर्ण के लिए, utf8 [/ utf8mb3] और utf8mb4 में समान संग्रहण विशेषताएँ हैं: समान कोड मान, समान एन्कोडिंग, समान लंबाई।
एक पूरक चरित्र के लिए, utf8 [/ utf8mb3] चरित्र को बिल्कुल भी संग्रहीत नहीं कर सकता , जबकि utf8mb4 को इसे संग्रहीत करने के लिए चार बाइट्स की आवश्यकता होती है। चूंकि utf8 [/ utf8mb3] चरित्र को बिल्कुल भी संग्रहीत नहीं कर सकता है, आपके पास utf8 [/ utf8mb3] कॉलम में कोई भी पूरक वर्ण नहीं हैं और आपको utf8 / / utf8mb3] पुराने संस्करणों के डेटा को अपग्रेड करते समय वर्णों को परिवर्तित करने या डेटा खोने की चिंता नहीं है। माई एसक्यूएल।
इसलिए यदि आप चाहते हैं कि आपका कॉलम बीएमपी के बाहर पड़े हुए पात्रों का समर्थन करे (और आप आमतौर पर चाहते हैं), जैसे इमोजी , "utf8mb4" का उपयोग करें। यह भी देखें कि वास्तविक उपयोग में सबसे आम गैर-बीएमपी यूनिकोड वर्ण क्या हैं? ।