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

Copia di emoji nel testo da MySQL a SQL Server

Il punto di codice Unicode del carattere 🤘 è U+1F918 , il che significa che non rientra nel Aereo multilingue di base (BMP) di Unicode, che copre codepoint fino a U+FFFF.

Per elaborare i caratteri Unicode al di fuori del BMP, è necessario applicare collazioni che supportano i caratteri supplementari , denominato *_SC :

Confronta i risultati di questa istruzione 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

come eseguito su un database utilizzando Latin1_General_CI_AS

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

rispetto a un database impostato su Latin1_General_100_CI_AI_SC

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

Perché vedi "🤘 "?

La codifica UTF-8 di U+1F918 è 0xF0 0x9F 0xA4 0x98 e i caratteri sono il risultato dell'interpretazione di questi codici come caratteri ANSI .

Perché vedi "�"?

Il carattere � è il CARATTERE SOSTITUTIVO Unicode ed è

e questo perché U+D83E è non un codepoint Unicode valido , ma la prima parola del codepoint codificata come UTF-16 (0xD83E 0xDD18 ).

Controlla cosa è memorizzato, non cosa viene visualizzato

La visualizzazione dei dati Unicode può essere complicata e il modo più efficiente per scoprire cosa sta succedendo sotto il cofano è guardare i byte. In TSQL, usa cast(... as varbinary) per analizzare dove la manipolazione dei dati Unicode va storta.