sql >> Database >  >> RDS >> Mysql

Emoji's in tekst kopiëren van MySQL naar SQL Server

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.



  1. beste manier om twee databaseservers aan te roepen

  2. Waar gaat de bestandsuitvoer van pg_dump naartoe op MacOS?

  3. Kan type 'NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle' niet laden

  4. Andere resultaatquery bij gebruik van mysql en mariadb