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

Při použití Entity Framework s MySQL jsou znaky Unicode nahrazeny základními znaky

MySQL umožňuje konfigurovat několik aspektů komunikace klient-server (podle 10.4 Připojení znakové sady a řazení dokumentace):

  • Kódování zdroje (tj. klienta):character_set_client
  • Kódování cíle (tj. serveru):character_set_connection
  • Vrácená data a metadata:character_set_results

Hádám, že se předpokládá, že zdrojové kódování pocházející z technologie Microsoftu je UTF-16 Little Endian.

Pokud jde o další dva, Connector/ NET Reference možností připojení řetězce dokumentace uvádí:

Připojení k MySQL je třeba říci, že cílové kódování je UTF-8 (což používají vaše sloupce MySQL). MySQL v současné době předpokládá, že odesíláte řetězce, které nejsou Unicode, což v podstatě dělá to samé jako převod na VARCHAR v SQL Server, za předpokladu, že kódová stránka určená výchozím řazením aktuální databáze je 1252 (Kódová stránka Windows 1252 se běžně označuje jako "ANSI “, i když je to technicky nepřesný název).

Následující text ukazuje chování na serveru SQL Server tak, že před řetězec nepředstavuje velké "N":

SELECT 'α'; -- Database's default Collation = Latin1_General_100_CI_AS_SC
-- a

SELECT 'α'; -- Database's default Collation = Hebrew_100_BIN2
-- ?

Zkuste to vyřešit následujícím způsobem:

  1. Prvním pokusem by mělo být přidání následujícího do připojovacího řetězce, aby se do MySQL odeslala znaková data jako UTF-8 (to by mělo pouze nastavit character_set_connection ):

    CharSet=utf8;
    

    Příklad úplného připojovacího řetězce zde

  2. Druhým pokusem by mělo být odeslání příkazu SQL při prvním připojení k nastavení proměnné na úrovni relace, která řídí kódování cíle:

    SET character_set_connection = utf8;
    

Další informace naleznete v následující části:

MySQL Charset/Collate

Podle části "utf8 Collations" na této stránce by bylo mnohem lepší použít utf8_unicode_ci pro řazení namísto utf8_general_ci (aby bylo jasno, toto doporučení nemá nic společného s problémem konverze znaků, který je zde řešen).

P.S. Tato otázka/odpověď má doprovodné otázky a odpovědi na DBA.StackExhange:

Proč se mi při dekódování řetězce Base64 na NVARCHAR na serveru SQL Server zobrazují nesprávné znaky?




  1. Jak změnit formát data a času v MySQL

  2. 3 Nechutné I/O statistiky, které zpožďují výkon SQL dotazu

  3. Prostorový index v MySQL – CHYBA – Nelze získat objekt geometrie z dat, která odesíláte do pole GEOMETRY

  4. Jak optimalizovat MySQL Boolean Full-Text Search? (Nebo čím to nahradit?) - C#