Domanda

Il mio database MySQL in grado di memorizzare il simbolo dell'euro bene (come ho provato con un client nativo di MySQL (HeidiSQL)). Ma con il connettore MySQL .NET mia applicazione ASP.NET utilizza non riesco a inserire né leggere di nuovo dal database: ho solo una? indietro carattere. Quale potrebbe essere la possibile causa?

È stato utile?

Soluzione

Vorrei suggerire esplicitamente specificando la codifica nella stringa di connessione:

  

Server = localhost; Database = schema; UID = foo e pwd = bar; charset = utf8 ;

E 'di solito si risolve la maggior parte dei problemi di codifica connessi con MySQL Connector / NET.

Altri suggerimenti

Direi che il connettore MySQL .NET imposta alcune variabili d'ambiente di confronto legati alla connessione; confrontare l'uscita di queste query sia sul HeidiSQL e .NET:

SHOW VARIABLES LIKE "character_set_%"; 
SHOW VARIABLES LIKE "collation_%";

Tutti dovrebbero contenere utf8-qualcosa. In caso contrario, è possibile modificare a runtime come nel manuale .

Il seguente comando Net può codificare questi per il database, e poi decodificare nel simbolo originale ...

System.Web.HttpUtility.HtmlEncode()

System.Web.HttpUtility.HtmlDecode()

Probabilmente si sta inserendo nel segno di euro in un campo che viene digitato come NVARCHAR altrimenti non sarebbe in grado di inserire e recuperare il segno di euro correttamente con altri clienti?

Si sta utilizzando la sintassi corretta nelle istruzioni SQL per l'inserimento e il recupero dei dati Unicode?

Per fare questo è necessario utilizzare il carattere identificatore N prima di qualsiasi stringa che è Unicode o otterrà silenziosamente convertito in un singolo byte di codifica e diventare un personaggio illeggibile per es.

//Inserting Unicode data
MySqlCommand cmd = new MySqlCommand();
cmd.CommandText = "INSERT INTO SOME_TABLE (someField) VALUES (N'@text')";
cmd.Parameters.Add("text", "Some Unicode Text");
cmd.Connection = conn;
cmd.ExecuteNonQuery();

//Selecting Unicode data
MySqlCommand select = new MySqlCommand();
select.CommandText = "SELECT * FROM SOME_TABLE WHERE someField=N'@text'";
cmd.Parameters.Add("text", "Some Unicode Text");
cmd.Connection = conn;
//Execute your query and process your Results...

Ho avuto un problema simile, cercando di importare dati da Sybase 12.5 a MS SQL Server 2005.

In sostanza negozi MSSQL £ ed euro segni bene in varchar se sono codificati a destra, che è grande, ma quello che non mi ero reso conto è che Sybase è stata l'output dei dati come windows-1252 (Europa occidentale) e non UTF 8 e questo ha causato dati come £ e il simbolo euro per ottenere tradotti dal programma di importazione come '?'. Raccontare il programma di importazione che i dati in ingresso è codificato come 1252 risolto il problema.

Se si codifica l'uscita dal DB di 1252 come si sta leggendo, si dovrebbe ottenere i simboli giusti fuori.

Ad esempio:

System.Text.Encoding enc = System.Text.Encoing.GetEncoding(1252);
MySqlDataReader msdr = command.ExecuteReader();
while(msdr.Read())
{
    ...
    string val = enc.GetString(enc.GetBytes(msddr.GetString(mssdr.GetOrdinal("varhcar_field"))));
    ...
}

Avete impostato correttamente il set di caratteri nella tua pagina di uscita? vale a dire una cosa del genere <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> o charset=iso-8859-15 ma non charset=iso-8859-1

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top