Mysql
 sql >> Base de données >  >> RDS >> Mysql

Copier des emojis dans le texte de MySQL vers SQL Server

Le point de code Unicode du caractère 🤘 est U+1F918 , ce qui signifie qu'il est en dehors du Basic Multilingual Plane (BMP) d'Unicode, qui couvre les points de code jusqu'à U+FFFF.

Pour traiter les caractères Unicode en dehors du BMP, vous devez appliquer collations prenant en charge les caractères supplémentaires , nommé *_SC :

Comparez les résultats de cette instruction 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

exécuté sur une base de données en utilisant Latin1_General_CI_AS

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

par rapport à une base de données définie sur Latin1_General_100_CI_AI_SC

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

Pourquoi voyez-vous "🤘 " ?

L'encodage UTF-8 de U+1F918 est 0xF0 0x9F 0xA4 0x98 , et les caractères sont le résultat de l'interprétation de ces codes en tant que caractères ANSI .

Pourquoi voyez-vous "�" ?

Le caractère � est le CARACTÈRE DE REMPLACEMENT Unicode et est

et c'est parce que U+D83E n'est pas un point de code Unicode valide , mais le premier mot du point de code codé en UTF-16 (0xD83E 0xDD18 ).

Vérifiez ce qui est stocké, pas ce qui est affiché

L'affichage des données Unicode peut être délicat, et le moyen le plus efficace de savoir ce qui se passe sous le capot est de regarder les octets. Dans TSQL, utilisez cast(... as varbinary) pour analyser où la manipulation des données Unicode tourne mal.