sql >> Database teknologi >  >> RDS >> Mysql

Kopiering af emojis i tekst fra MySQL til SQL Server

Unicode-kodepunktet for karakteren 🤘 er U+1F918 , hvilket betyder, at det er uden for Basic Multilingual Plane (BMP) af Unicode, som dækker kodepunkter op til U+FFFF.

For at behandle Unicode-tegn uden for BMP skal du anvende sammenstillinger, der understøtter supplerende tegn , navngivet som *_SC :

Sammenlign resultaterne af denne SQL-sætning

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

som køres mod en database ved hjælp af Latin1_General_CI_AS

EmojiSC EmojiSCUnicode  EmojiBinary EmojiConvBinary EmojiUnicode
NULL    129304          0x3ED818DD  0x3ED8          55358

versus en database sat til Latin1_General_100_CI_AI_SC

EmojiSC EmojiSCUnicode  EmojiBinary EmojiConvBinary EmojiUnicode
🤘      129304          0x3ED818DD  0x3ED818DD      129304

Hvorfor ser du "🤘 "?

UTF-8-kodningen af ​​U+1F918 er 0xF0 0x9F 0xA4 0x98 , og tegnene er resultatet af fortolkning af disse koder som ANSI-tegn .

Hvorfor ser du "�"?

Karakteren � er Unicode UDSKIFTNINGSKARAKTER og er

og det er fordi U+D83E er ikke et gyldigt Unicode-kodepunkt , men det første ord i kodepunktet kodet som UTF-16 (0xD83E 0xDD18 ).

Tjek, hvad der er gemt, ikke hvad der vises

Det kan være svært at vise Unicode-data, og den mest effektive måde at finde ud af, hvad der foregår under motorhjelmen, er at se på bytes. I TSQL skal du bruge cast(... as varbinary) at analysere, hvor Unicode-datamanipulation går galt.



  1. CodeIgniter-konfigurationstegnsæt og UTF-8-understøttelse

  2. Sådan installeres SQL Server på Ubuntu 18.04

  3. Hvor mange tegn i varchar(max)?

  4. Kan PDO rowCount() efter UPDATE-forespørgsel vise forskel mellem ingen ændringer og en ikke-eksisterende række?