sql >> Databáze >  >> RDS >> Mysql

Kopírování emotikonů v textu z MySQL na SQL Server

Kódový bod Unicode postavy 🤘 je U+1F918 , což znamená, že je mimo základní vícejazyčnou rovinu (BMP) Unicode, který pokrývá kódové body až do U+FFFF.

Chcete-li zpracovat znaky Unicode mimo BMP, musíte použít kombinace podporující doplňkové znaky , pojmenované jako *_SC :

Porovnejte výsledky tohoto příkazu 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

jako spuštění proti databázi pomocí Latin1_General_CI_AS

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

oproti databázi nastavené na Latin1_General_100_CI_AI_SC

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

Proč se vám zobrazuje „🤘 "?

Kódování UTF-8 U+1F918 je 0xF0 0x9F 0xA4 0x98 a znaky jsou výsledkem interpretace těchto kódů jako znaky ANSI .

Proč se vám zobrazuje „�“?

Znak � je Unicode NÁHRADNÍ ZNAK a je

a to proto, že U+D83E není platný kódový bod Unicode , ale první slovo kódového bodu je zakódováno jako UTF-16 (0xD83E 0xDD18 ).

Zkontrolujte, co je uloženo, ne to, co se zobrazuje

Zobrazení dat Unicode může být složité a nejúčinnějším způsobem, jak zjistit, co se děje pod kapotou, je podívat se na bajty. V TSQL použijte cast(... as varbinary) analyzovat, kde dochází k chybné manipulaci s daty Unicode.



  1. nastavení mamp portů na 80 a 3306

  2. Vytvořte jedinečný index pro nejedinečný sloupec

  3. Poddotaz SQL Server vrátil více než 1 hodnotu. To není povoleno, pokud poddotaz následuje =, !=, <, <=,>,>=

  4. Migrace Laravel – porušení omezení integrity:1452 Nelze přidat nebo aktualizovat podřízený řádek:omezení cizího klíče se nezdaří