MySQL ermöglicht die Konfiguration verschiedener Aspekte der Client-Server-Kommunikation (gemäß der 10.4 Verbindungszeichensätze und Sortierungen Dokumentation):
- Kodierung der Quelle (d. h. Client):
character_set_client
- Ziel-(d. h. Server-)Kodierung:
character_set_connection
- Zurückgegebene Daten und Metadaten:
character_set_results
Ich vermute, dass angenommen wird, dass die Quellcodierung, die von einer Microsoft-Technologie stammt, UTF-16 Little Endian ist.
Wie bei den anderen beiden, dem Connector/ NET Connection-String-Optionsreferenz Dokumentationsstatus:
Der Verbindung zu MySQL muss mitgeteilt werden, dass die Zielcodierung UTF-8 ist (was Ihre MySQL-Spalten verwenden). MySQL geht derzeit davon aus, dass Sie Nicht-Unicode-Strings senden, was effektiv dasselbe tut wie die Konvertierung in VARCHAR
in SQL Server unter der Annahme, dass die durch die Standardsortierung der aktuellen Datenbank angegebene Codepage 1252 ist (Windows-Codepage 1252 wird allgemein als „ANSI
", auch wenn das technisch ist falscher Name).
Im Folgenden wird das Verhalten in SQL Server gezeigt, wenn der Zeichenfolge kein Großbuchstabe „N“ vorangestellt wird:
SELECT 'α'; -- Database's default Collation = Latin1_General_100_CI_AS_SC
-- a
SELECT 'α'; -- Database's default Collation = Hebrew_100_BIN2
-- ?
Versuchen Sie Folgendes, um dies zu beheben:
-
Der erste Versuch sollte darin bestehen, Ihrer Verbindungszeichenfolge Folgendes hinzuzufügen, um Zeichendaten als UTF-8 an MySQL zu senden (dies sollte nur
character_set_connection
setzen ):CharSet=utf8;
Beispiel für eine vollständige Verbindungszeichenfolge hier
-
Der zweite Versuch sollte darin bestehen, bei der ersten Verbindung einen SQL-Befehl zu senden, um die Variable auf Sitzungsebene festzulegen, die die Zielkodierung steuert:
SET character_set_connection = utf8;
Weitere Informationen finden Sie unter:
Laut dem Abschnitt "utf8 Collations" dieser Seite wäre es viel besser, utf8_unicode_ci
zu verwenden für die Sortierung anstelle von utf8_general_ci
(um es klarzustellen, diese Empfehlung hat nichts mit dem Problem der Zeichenkonvertierung zu tun, das hier behandelt wird).
P.S. Diese Frage/Antwort hat ein begleitendes Q&A auf DBA.StackExhange: