Der Unicode-Codepunkt des Zeichens 🤘 ist U+1F918 , was bedeutet, dass es sich außerhalb der Basic Multilingual Plane befindet (BMP) von Unicode, das Codepunkte bis zu U+FFFF abdeckt.
Um Unicode-Zeichen außerhalb des BMP zu verarbeiten, müssen Sie Sortierungen, die ergänzende Zeichen unterstützen
, benannt als *_SC
:
Vergleichen Sie die Ergebnisse dieser SQL-Anweisung
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
wie gegen eine Datenbank mit Latin1_General_CI_AS
ausgeführt
EmojiSC EmojiSCUnicode EmojiBinary EmojiConvBinary EmojiUnicode
NULL 129304 0x3ED818DD 0x3ED8 55358
gegenüber einer auf Latin1_General_100_CI_AI_SC
eingestellten Datenbank
EmojiSC EmojiSCUnicode EmojiBinary EmojiConvBinary EmojiUnicode
🤘 129304 0x3ED818DD 0x3ED818DD 129304
Warum sehen Sie "🤘
"?
Die UTF-8-Kodierung von U+1F918 ist 0xF0 0x9F 0xA4 0x98 , und die Zeichen sind das Ergebnis der Interpretation dieser Codes als ANSI-Zeichen .
Warum sehen Sie "�"?
Das Zeichen � ist das Unicode ERSATZZEICHEN und ist
und das liegt daran, dass U+D83E kein gültiger Unicode-Codepunkt , aber das erste Wort des Codepunkts codiert als UTF-16 (0xD83E 0xDD18
).
Prüfen Sie, was gespeichert ist, nicht was angezeigt wird
Das Anzeigen von Unicode-Daten kann schwierig sein, und der effizienteste Weg, um herauszufinden, was unter der Haube vor sich geht, besteht darin, sich die Bytes anzusehen. Verwenden Sie in TSQL cast(... as varbinary)
um zu analysieren, wo die Manipulation von Unicode-Daten schief geht.