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:
-
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
-
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:
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?