MySQL gör det möjligt att konfigurera flera aspekter av klient-serverkommunikationen (enligt 10.4 Anslutningsteckenuppsättningar och sorteringar dokumentation):
- Källkodning (dvs. klient):
character_set_client
- Destination (dvs. server) kodning:
character_set_connection
- Returerade data och metadata:
character_set_results
Jag gissar att det antas att källkodningen, som kommer från en Microsoft-teknik, är UTF-16 Little Endian.
När det gäller de andra två, Connector/ NET Connection-String Options Reference dokumentationen säger:
Anslutningen till MySQL måste få veta att målkodningen är UTF-8 (vilket är vad dina MySQL-kolumner använder). MySQL antar för närvarande att du skickar icke-Unicode-strängar, vilket i praktiken gör samma sak som att konvertera till VARCHAR
i SQL Server, förutsatt att teckentabellen som anges av standardsorteringen av den aktuella databasen är 1252 (Windows-kodsidan 1252 kallas vanligtvis "ANSI
", även om det är en tekniskt felaktigt namn).
Följande visar beteendet i SQL Server genom att inte prefixa strängen med ett versaler "N":
SELECT 'α'; -- Database's default Collation = Latin1_General_100_CI_AS_SC
-- a
SELECT 'α'; -- Database's default Collation = Hebrew_100_BIN2
-- ?
Försök med följande för att fixa detta:
-
Första försöket bör vara att lägga till följande till din anslutningssträng för att skicka teckendata som UTF-8 till MySQL (detta bör bara ställa in
character_set_connection
):CharSet=utf8;
Exempel på fullständig anslutningssträng här
-
Andra försöket bör vara att skicka ett SQL-kommando, vid den första anslutningen, för att ställa in sessionsnivåvariabeln som styr destinationskodningen:
SET character_set_connection = utf8;
För mer information, se följande:
Enligt avsnittet "utf8 Collations" på den sidan skulle det vara mycket bättre att använda utf8_unicode_ci
för sorteringen istället för utf8_general_ci
(för att vara tydlig har denna rekommendation ingenting att göra med teckenkonverteringsfrågan som behandlas här).
P.S. Den här frågan/svaret har en följeslagare Q &A på DBA.StackExhange:
Varför får jag felaktiga tecken när jag avkodar en Base64-sträng till NVARCHAR i SQL Server?