Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Kopieren von Emojis im Text von MySQL nach SQL Server

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.