2012-06-14 185 views
0

它關於'批量插入'的SQL命令,我有一些法國口音的問題。在從文本文件中插入數據庫表後,'à'或'a acute'顯示爲n ++。這是目前轉換遇到問題的唯一角色。我嘗試使用'WITH'子句修改命令並指定'RAW'或'1252'或'ACP'等值,但他們都不能保留這個特殊字符。我正在使用的數據庫是Sql Server 2008.非常感謝任何幫助。謝謝。我不使用任何編碼或解碼技術。只是試圖將任何文本文件放回數據庫。VB.net批量插入


感謝您的回覆。但是,將列類型從'varchar'更改爲'nvarchar'實際上並沒有解決問題。它現在在數據庫表格列中顯示爲'∩┐╜'。任何想法的人?提前致謝

+0

有一個字符編碼的問題,怎麼回事 - 確保你使用UTF-8。 –

+0

什麼樣的數據類型是您要插入數據的列?它需要是nvarchar或ntext(儘管這是折舊),以便存儲unicode數據。 – Bridge

+0

我正在使用varchar。 – Sanjay

回答

1

正如Bridge所說,您需要NVARCHAR。您還需要將文件轉換爲UTF-16,因爲即使在使用NVARCHAR時,BULK INSERT也無法與UTF-8一起播放。

請參閱this question瞭解更多信息。

有幾個問題就在這裏轉換文件編碼,但備案這個工作對我來說:

public static void ConvertUtf8ToUtf16(string path, int bufferSize = 4096) 
    { 
    string tempPath = path + ".tmp"; 

    char[] buffer = new char[bufferSize]; 
    using (var input = File.OpenText(path)) 
    using (var output = new StreamWriter(tempPath, false, Encoding.Unicode)) 
     { 
     int index = 0; 
     int chars; 
     while ((chars = input.Read(buffer, index, bufferSize)) > 0) 
      output.Write(buffer, 0, chars); 
     } 

    // Swap the files 
    File.Delete(path); 
    File.Move(tempPath, path); 
    } 
+0

感謝您的回覆。但是,將列類型從'varchar'更改爲'nvarchar'實際上並沒有解決問題。它現在在數據庫表格列中顯示爲'∩┐╜'。任何想法 – Sanjay

+0

這不是完整的解決方案。什麼是你的文件的字符編碼? 'BULK INSERT'很敏感。 – 2012-07-17 19:08:05

0

將列類型更改爲nvarchar

+0

嗨,謝謝你的迴應。但是,將列類型從'varchar'更改爲'nvarchar'實際上並沒有解決問題。它現在在數據庫表格列中顯示爲'∩┐╜'。任何想法。 – Sanjay

+0

Addational information:我將這些法文字符從文本文件插入到數據庫表中。我正在使用批量插入來做到這一點。謝謝 – Sanjay

+0

@Sanjay - 批量插入文件不是UTF-16,這是你的問題。 –