आपके पास EXTRATERRESTRIAL ALIEN (U+1F47D)<है /कोड>
और ब्रोकेन हार्ट (U+1F494)
जो मूल बहुभाषा क्षेत्र में नहीं हैं। उन्हें जावा में एक चार के रूप में भी प्रदर्शित नहीं किया जा सकता है, "👽💔.length() ==4
. वे निश्चित रूप से शून्य वर्ण नहीं हैं और यदि आप उनका समर्थन करने वाले फ़ॉन्ट का उपयोग नहीं कर रहे हैं तो आपको वर्ग दिखाई देंगे।
एक पूरक चरित्र के लिए, utf8 चरित्र को बिल्कुल भी संग्रहीत नहीं कर सकता है, जबकि utf8mb4 को इसे संग्रहीत करने के लिए चार बाइट्स की आवश्यकता होती है। चूंकि utf8 चरित्र को बिल्कुल भी संग्रहीत नहीं कर सकता है, आपके पास utf8 कॉलम में कोई पूरक वर्ण नहीं है और आपको MySQL के पुराने संस्करणों से utf8 डेटा को अपग्रेड करते समय वर्णों को परिवर्तित करने या डेटा खोने की चिंता करने की आवश्यकता नहीं है।
तो इन वर्णों का समर्थन करने के लिए, आपका MySQL 5.5+ होना चाहिए और आपको utf8mb4
का उपयोग करने की आवश्यकता है हर जगह। कनेक्शन एन्कोडिंग utf8mb4
होना चाहिए , वर्ण सेट utf8mb4
. होना चाहिए और संयोजन utf8mb4
be होना चाहिए . जावा के लिए यह अभी भी "utf-8"
है , लेकिन MySQL को एक भेद की आवश्यकता है।
मैं नहीं जानता कि आप किस ड्राइवर का उपयोग कर रहे हैं लेकिन कनेक्शन वर्णसेट सेट करने के लिए ड्राइवर अज्ञेयवादी तरीका क्वेरी भेजना है:
SET NAMES 'utf8mb4'
संबंध बनाने के ठीक बाद।
इसे Connector/J के लिए भी देखें :
<ब्लॉकक्वॉट>14.14:मैं कनेक्टर/जे के साथ 4-बाइट UTF8, utf8mb4 का उपयोग कैसे कर सकता हूं?
कनेक्टर/जे के साथ 4-बाइट UTF8 का उपयोग करने के लिए, MySQL सर्वर कोcharacter_set_server=utf8mb4 के साथ कॉन्फ़िगर करें। तब कनेक्टर/जे उस सेटिंग का उपयोग करेगाजब तक कि characterEncoding में नहीं . है कनेक्शनस्ट्रिंग में सेट किया गया है . यह वर्ण सेट की स्वतः पहचान के बराबर है।
अपने कॉलम और डेटाबेस को भी एडजस्ट करें:
var1 varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL
फिर से, आपके MySQL संस्करण को utf8mb4 समर्थन के लिए अपेक्षाकृत अप-टू-डेट होना चाहिए।