🤘 वर्ण का यूनिकोड कोडपॉइंट U+1F918 है। , जिसका अर्थ है कि यह मूल बहुभाषी विमान के बाहर है (बीएमपी) यूनिकोड का, जो U+FFFF तक के कोडपॉइंट को कवर करता है।
बीएमपी के बाहर यूनिकोड वर्णों को संसाधित करने के लिए, आपको पूरक वर्णों का समर्थन करने वाले संयोजन
, जिसका नाम *_SC
. रखा गया है :
इस SQL कथन के परिणामों की तुलना करें
select
nchar(unicode(N'🤘' collate Latin1_General_100_CI_AS_SC)) as EmojiSC,
unicode(N'🤘' collate Latin1_General_100_CI_AS_SC) as EmojiSCUnicode,
cast(N'🤘' as varbinary) as EmojiBinary,
cast(nchar(unicode(N'🤘')) as varbinary) as EmojiConvBinary,
unicode(N'🤘') as EmojiUnicode
Latin1_General_CI_AS
. का उपयोग कर डेटाबेस के विरुद्ध चलाने के रूप में
EmojiSC EmojiSCUnicode EmojiBinary EmojiConvBinary EmojiUnicode
NULL 129304 0x3ED818DD 0x3ED8 55358
बनाम Latin1_General_100_CI_AI_SC
. पर सेट किए गए डेटाबेस के विरुद्ध
EmojiSC EmojiSCUnicode EmojiBinary EmojiConvBinary EmojiUnicode
🤘 129304 0x3ED818DD 0x3ED818DD 129304
आपको "🤘
. क्यों दिखाई देता है "?
U+1F918 का UTF-8 एन्कोडिंग है 0xF0 0x9F 0xA4 0x98ए> , और वर्ण इन कोडों को ANSI वर्णों के रूप में व्याख्या करने का परिणाम हैं। ।
आपको "�" क्यों दिखाई देता है?
वर्ण � यूनिकोड है प्रतिस्थापन वर्ण और है
और ऐसा इसलिए है क्योंकि U+D83E मान्य यूनिकोड कोडपॉइंट नहीं , लेकिन कोडपॉइंट का पहला शब्द UTF-16 (0xD83E 0xDD18
के रूप में एन्कोड किया गया है। )।
जांचें कि क्या संग्रहीत है, न कि क्या प्रदर्शित किया जाता है
यूनिकोड डेटा प्रदर्शित करना मुश्किल हो सकता है, और यह पता लगाने का सबसे कारगर तरीका है कि हुड के नीचे क्या चल रहा है, बाइट्स को देखना है। TSQL में, cast(... as varbinary)
. का उपयोग करें विश्लेषण करने के लिए जहां यूनिकोड डेटा हेरफेर गलत हो जाता है।