Het Unicode-codepunt van het teken 🤘 is U+1F918 , wat betekent dat het buiten het Basic Multilingual Plane ligt (BMP) van Unicode, die codepunten tot U+FFFF dekt.
Om Unicode-tekens buiten de BMP te verwerken, moet u sorteringen die aanvullende tekens ondersteunen
, genoemd als *_SC
:
Vergelijk de resultaten van deze SQL-instructie
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
zoals uitgevoerd tegen een database met behulp van Latin1_General_CI_AS
EmojiSC EmojiSCUnicode EmojiBinary EmojiConvBinary EmojiUnicode
NULL 129304 0x3ED818DD 0x3ED8 55358
versus een database ingesteld op Latin1_General_100_CI_AI_SC
EmojiSC EmojiSCUnicode EmojiBinary EmojiConvBinary EmojiUnicode
🤘 129304 0x3ED818DD 0x3ED818DD 129304
Waarom zie je "🤘
"?
De UTF-8-codering van U+1F918 is 0xF0 0x9F 0xA4 0x98 , en de tekens zijn het resultaat van het interpreteren van deze codes als ANSI-tekens .
Waarom zie je "�"?
Het teken � is het Unicode VERVANGENDE KARAKTER en is
en dat komt omdat U+D83E geen geldig Unicode-codepunt is , maar het eerste woord van het codepunt gecodeerd als UTF-16 (0xD83E 0xDD18
).
Controleer wat is opgeslagen, niet wat wordt weergegeven
Het weergeven van Unicode-gegevens kan lastig zijn, en de meest efficiënte manier om erachter te komen wat er onder de motorkap gebeurt, is door naar de bytes te kijken. Gebruik in TSQL cast(... as varbinary)
om te analyseren waar Unicode-gegevensmanipulatie fout gaat.