MySQL consente di configurare diversi aspetti della comunicazione client-server (secondo 10.4 Set di caratteri di connessione e regole di confronto documentazione):
- Codifica sorgente (ovvero client):
character_set_client
- Codifica della destinazione (ovvero del server):
character_set_connection
- Dati e metadati restituiti:
character_set_results
Immagino che si presuppone che la codifica sorgente, proveniente da una tecnologia Microsoft, sia UTF-16 Little Endian.
Per quanto riguarda gli altri due, il Connector/ Riferimento alle opzioni della stringa di connessione NET la documentazione afferma:
La connessione a MySQL deve essere informata che la codifica di destinazione è UTF-8 (che è ciò che stanno usando le tue colonne MySQL). MySQL attualmente presume che tu stia inviando stringhe non Unicode, facendo effettivamente la stessa cosa della conversione in VARCHAR
in SQL Server, presupponendo che la tabella codici specificata dalle regole di confronto predefinite del database corrente sia 1252 (la tabella codici di Windows 1252 viene comunemente denominata "ANSI
", anche se questo è un tecnicamente nome impreciso).
Di seguito viene illustrato il comportamento in SQL Server non anteponendo alla stringa una "N" maiuscola:
SELECT 'α'; -- Database's default Collation = Latin1_General_100_CI_AS_SC
-- a
SELECT 'α'; -- Database's default Collation = Hebrew_100_BIN2
-- ?
Prova quanto segue per risolvere questo problema:
-
Il primo tentativo dovrebbe essere quello di aggiungere quanto segue alla stringa di connessione per inviare i dati dei caratteri come UTF-8 a MySQL (questo dovrebbe semplicemente impostare
character_set_connection
):CharSet=utf8;
Esempio di stringa di connessione completa qui
-
Il secondo tentativo dovrebbe essere quello di inviare un comando SQL, al momento della connessione iniziale, per impostare la variabile a livello di sessione che controlla la codifica di destinazione:
SET character_set_connection = utf8;
Per ulteriori informazioni, vedere quanto segue:
Secondo la sezione "utf8 Collations" di quella pagina, sarebbe molto meglio usare utf8_unicode_ci
per la Fascicolazione invece di utf8_general_ci
(per essere chiari, questa raccomandazione non ha nulla a che fare con la questione della conversione del personaggio trattata qui).
PS Questa domanda/risposta ha un compagno di domande e risposte su DBA.StackExhange: