2009-04-21 6 views
4

Ich versuche, eine Zeichenfolge in eine MySQL-Datenbank einzufügen. Ich kann es einfügen, indem Sie die Abfrage auf dem Server ausführen, aber wenn ich versuche, meine C# -Quelldatei zu verwenden, um "Iñtërnâtiônàlizætiøn" einzufügen, erhalte ich "IÃ ± tÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ? Ich habe versucht, es als Parameter hinzuzufügen und hinzufügen, charset = utf8 zu meiner Verbindungszeichenfolge, aber kein Glück. Die Tabelle in der Datenbank hat utf8 als Zeichensatz. Fehle ich etwas?C#: Unicode aus einer Zeichenfolge mit MySQL

Dies ist mein Code (ein String verwenden):

sqlBuffer.Append(
    string.Format(
     @"INSERT `resources` (id, somefield) 
     VALUES (20004,'Iñtërnâtiônàlizætiøn');"); 
+0

Das gleiche passiert mit SQL Server, auch wenn ich das @ ablege. Ich bin total verblüfft. Ich habe sogar versucht, die Zeichenfolge im Escape-Unicode-Format (\ uXXXX) anzugeben. – Echilon

+0

In SQL Server ist Ihr DB-Feld nvarchar und verwenden Sie N '' ("INSERT' Ressourcen' (ID, somefield) VALUES (20004, N'Iñtërnâtiônàlizætiøn '); ")? – laktak

+0

Es ist ein Nvarchar und ich benutze N ' – Echilon

Antwort

0

Sie angeben müssen, dass es Unicode/UTF-8 mit N '' oder _utf8 '' ist:

sqlBuffer.Append(
    string.Format(
     @"INSERT `resources` (id, somefield) 
     VALUES (20004, N'Iñtërnâtiônàlizætiøn');"); 
+0

Kein Glück, ich fürchte, immer noch eine Zeile von Müll, wenn die Abfrage ausgeführt wird. – Echilon

+0

BTW, haben Sie die .cs-Datei gespeichert, die den Text 'Iñtërnâtiônàlizætiøn' mit Codierung enthält? Markieren Sie VS, Speichern unter und klicken Sie auf den Pfeil des Speicherbefehls. – laktak

+0

Es wird als UTF8 gespeichert. – Echilon

0

Sie müssen wahrscheinlich Wählen Sie die richtige Kultur und stellen Sie sie String zur Verfügung.Format. Möglicherweise möchten http://msdn.microsoft.com/en-us/library/1ksz8yb7.aspx lesen, die das folgende Beispiel inspiriert (ACHTUNG: nicht getestet):

using System.Globalization; 

// ... 

string[] cultureNames = { "en-US", "fr-FR", "de-DE", "es-ES" };  

// this loop will inject your string using various cultures 
foreach (string cultureName in cultureNames) 
{ 
    CultureInfo culture = new CultureInfo(cultureName); 

    sqlBuffer.Append(
    string.Format(culture, 
     @"INSERT `resources` (id, somefield) 
     VALUES (20004, N'Iñtërnâtiônàlizætiøn');"); 
} 

Beachten Sie, dass Sie müssen auch Ihre Gedecke in Bezug auf Zeichensatz Sortierungs überprüfen.