2009-04-21 80 views
4

我試圖插入一個字符串到MySQL數據庫。我可以通過在服務器上運行查詢來插入它,但是當我嘗試使用我的C#源文件插入「Iñtërnâtiônàlizætiøn」時,我會得到「Iñ±tërnâââÃÃÃÃ」lizÃ|tiøn「。我試着將它作爲參數添加,然後將charset = utf8添加到我的連接字符串中,但沒有運氣。數據庫中的表具有utf8,因爲它是字符集。我錯過了什麼。C#:與MySQL的字符串的Unicode

這是我的代碼(使用StringBuilder的):

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

即使我放下@,SQL Server也是如此。我完全被這個困惑了。我甚至嘗試添加以轉義的unicode格式(\ uXXXX)指定字符串。 – Echilon 2009-04-22 08:20:10

+0

在SQL Server上,您的數據庫字段是否爲nvarchar,並且您是否使用N'(「INSERT`resources`(id,somefield)VALUES(20004,N'Iñtërnâtiônàlizætiøn');」)? – laktak 2009-04-22 08:41:39

回答

0

你需要指定它的Unicode/UTF8與N '' 或_utf8 '':

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

你可能需要選擇正確的文化,並將其提供給string.Format。 您可能需要閱讀http://msdn.microsoft.com/en-us/library/1ksz8yb7.aspx啓發下面的例子(警告:未經):

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');"); 
} 

請注意,您還需要關於字符集校對檢查你的表設置。