MySQL में utf8mb4 और utf8 charsets में क्या अंतर है?


341

MySQL में utf8mb4और utf8charsets में क्या अंतर है ?

मुझे पहले से ही ASCII , UTF-8 , UTF-16 और UTF-32 एनकोडिंग्स के बारे में पता है; लेकिन मैं यह जानने के लिए उत्सुक हूं कि MySQL सर्वरutf8mb4 में परिभाषित अन्य एन्कोडिंग प्रकारों के साथ एन्कोडिंग के समूह का अंतर क्या है ।

क्या इसके utf8mb4बजाय उपयोग करने के कोई विशेष लाभ / प्रस्ताव हैं utf8?

जवाबों:


391

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" का उपयोग करें। यह भी देखें कि वास्तविक उपयोग में सबसे आम गैर-बीएमपी यूनिकोड वर्ण क्या हैं?


10
केवल मामलों का सामना करना पड़ा (अब तक) जहां utf8mb4 को 'आवश्यक' चीनी और इमोटिकॉन्स थे। अस्पष्ट अक्षर हैं जिनकी आवश्यकता है।
रिक जेम्स

10
यदि आप अपने डेटाबेस में एन्क्रिप्टेड पासवर्ड और डेटा रखने के लिए उपयोग करते हैं, तो इसकी आवश्यकता है। मैं सामान्य utf8 प्रारूप का उपयोग करके mysql में एन्क्रिप्टेड पासवर्ड रख रहा था जिससे मुझे कुछ पासवर्डों के साथ यादृच्छिक रूप से बहुत परेशानी हुई और डीबग करना बहुत कठिन था, इसलिए अंत में मैंने बेस 64 एनकोड का उपयोग करने की कोशिश की और समस्या को अस्थायी रूप से ठीक किया। लेकिन, अब मुझे इसका कारण पता है।
मोजतबा रेज़ियन

38
@idealidea एन्क्रिप्ट किया गया डेटा बाइनरी है, और आपको बाइनरी डेटा को एक वर्चर कॉलम में स्टोर नहीं करना चाहिए। :)
कोडकस्टर

8
@thomasrutter UTF-8 के साथ सहेजने के लिए इस (utter) वर्ण का प्रयास करें। :)
५०२_गीक

2
@MojtabaRezaeian यह पासवर्ड एल्गोरिदम में कुछ हद तक निर्भर करता है - bcrypt2 ASCII का उत्पादन करेगा।
जैसन

60

utf8mb4क्योंकि आजकल हम न केवल भाषा पात्रों लेकिन यह भी प्रतीक, नव शुरू की emojis, और इतने पर संग्रहीत करने के लिए की जरूरत का समर्थन वर्ण सेट उपयोगी है।

माथियास ब्येनेंस द्वारा MySQL डेटाबेस में पूर्ण यूनिकोड का समर्थन करने के बारे में एक अच्छा पढ़ा भी इस पर कुछ प्रकाश डाल सकता है।


11
MySQL 8.0 अब utf8mb4 वर्ण सेट के लिए डिफ़ॉल्ट है। [ mysql.com/products/enterprise/techspec.html]
अहमद रेज

47

MySQL 8.0 संदर्भ मैनुअल से लिया गया :

  • utf8mb4: यूटीएफ -8 यूनिकोड वर्ण का एन्कोडिंग प्रति वर्ण एक से चार बाइट्स का उपयोग करके सेट किया गया ।

  • utf8mb3: यूटीएफ -8 यूनिकोड वर्ण का एन्कोडिंग प्रति वर्ण एक से तीन बाइट्स का उपयोग करके सेट किया गया ।

में MySQL utf8 वर्तमान में एक अन्य नाम के लिए है utf8mb3जो अब मान्य नहीं है और भविष्य में निकाल दिया जाएगा MySQL रिलीज। उस बिंदु पर utf8 एक संदर्भ बन जाएगा utf8mb4

इसलिए इस उपनाम की परवाह किए बिना, आप जानबूझकर खुद को एक utf8mb4एन्कोडिंग सेट कर सकते हैं ।

जवाब को पूरा करने के लिए, मैं नीचे @ विलियमनट्राइक की टिप्पणी (मैनुअल से भी ली गई) जोड़ना चाहूंगा :

के अर्थ के बारे में अस्पष्टता से बचने के लिए utf8, utf8mb4इसके बजाय वर्ण सेट संदर्भों के लिए स्पष्ट रूप से निर्दिष्ट करने पर विचार करें utf8

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.