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