sql >> Database teknologi >  >> RDS >> Mysql

Når du bruger Entity Framework med MySQL, erstattes Unicode-tegn med grundlæggende tegn

MySQL giver mulighed for at konfigurere flere aspekter af klient-server-kommunikationen (ifølge 10.4 Forbindelseskaraktersæt og sorteringer dokumentation):

  • Kilde (dvs. klient) kodning:character_set_client
  • Destination (dvs. server) kodning:character_set_connection
  • Returneret data og metadata:character_set_results

Jeg gætter på, at det antages, at kildekodningen, der kommer fra en Microsoft-teknologi, er UTF-16 Little Endian.

Hvad angår de to andre, er Connector/ NET Connection-String Options Reference dokumentationen siger:

Forbindelsen til MySQL skal fortælles, at målkodningen er UTF-8 (hvilket er, hvad dine MySQL-kolonner bruger). MySQL antager i øjeblikket, at du sender ikke-Unicode-strenge, hvilket i praksis gør det samme som at konvertere til VARCHAR i SQL Server, idet det antages, at den tegntabel, der er angivet af standardsorteringen af ​​den aktuelle database, er 1252 (Windows-kodeside 1252 omtales almindeligvis som "ANSI ", selvom det er en teknisk unøjagtigt navn).

Det følgende viser adfærden i SQL Server ved ikke at sætte strengen foran med et stort "N":

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

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

Prøv følgende for at rette dette:

  1. Første forsøg bør være at tilføje følgende til din forbindelsesstreng for at sende tegndata som UTF-8 til MySQL (dette skal bare indstille character_set_connection ):

    CharSet=utf8;
    

    Eksempel på fuld forbindelsesstreng her

  2. Andet forsøg bør være at sende en SQL-kommando, efter den første forbindelse, for at indstille den variabel på sessionsniveau, der styrer destinationskodningen:

    SET character_set_connection = utf8;
    

For mere information, se venligst følgende:

MySQL Charset/Collate

Ifølge afsnittet "utf8 Collations" på den side ville det være langt bedre at bruge utf8_unicode_ci for sorteringen i stedet for utf8_general_ci (For at være klar, har denne anbefaling intet at gøre med karakterkonverteringsproblemet, der behandles her).

P.S. Dette spørgsmål/svar har et ledsagende spørgsmål og svar på DBA.StackExhange:

Hvorfor får jeg forkerte tegn, når jeg afkoder en Base64-streng til NVARCHAR i SQL Server?




  1. Rekursiv forespørgsel brugt til transitiv lukning

  2. MySQL:Kloning af en MySQL-database på den samme MySql-instans

  3. Hovedanvendelse af sys.dm_os_wait_stats

  4. Aktivitet og baggrundstjeneste Adgang til SQLite-database