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] डेटा को पुराने संस्करणों से अपग्रेड करते समय वर्णों को परिवर्तित करने या डेटा खोने की चिंता करने की आवश्यकता नहीं है। MySQL.
इसलिए यदि आप चाहते हैं कि आपका कॉलम बीएमपी (और आप आमतौर पर चाहते हैं) के बाहर संग्रहीत वर्णों का समर्थन करें, जैसे कि इमोजी , "utf8mb4" का उपयोग करें। यह भी देखें वास्तविक उपयोग में सबसे आम गैर-बीएमपी यूनिकोड वर्ण कौन से हैं? ।