我必須創建一個C#應用程序,它在文本框中顯示unicode數據。如何檢索直接存儲在非Unicode字段中的Unicode數據作爲SQL Server中的varchar格式
但是SQL服務器列存儲具有包含unicode數據的varchar數據。但由於varchar基於非Unicode,它顯示字符串如「????????」。
那麼我面臨的問題是我不能改變列類型,因爲有其他依賴應用程序運行。
我必須創建一個C#應用程序,它在文本框中顯示unicode數據。如何檢索直接存儲在非Unicode字段中的Unicode數據作爲SQL Server中的varchar格式
但是SQL服務器列存儲具有包含unicode數據的varchar數據。但由於varchar基於非Unicode,它顯示字符串如「????????」。
那麼我面臨的問題是我不能改變列類型,因爲有其他依賴應用程序運行。
你可以嘗試從sql server讀取作爲varbinary(...)轉換的數據,然後在C#中創建自己的StreamReader,指定編碼。你需要知道數據是如何編碼的,因爲在.NET中有5種標準的Unicode編碼。
如果沒有轉換爲列的排序規則,則不能在varchar
中存儲Unicode數據。那麼,如果將Unicode存儲在varchar
列中,並且可能丟失,那麼Unicode將被編碼的完全不同。如果您看到?????
,則表示編碼在存儲時找不到映射到ANSI值的字符,而是存儲問號。如果你想在數據庫中存儲Unicode,正確的解決方案是改變列的數據類型。如果您無法更改列的數據類型,請添加一列設置爲nvarchar
並確保您的Unicode源讀取和寫入該列。
您可能還需要繼續寫入varchar列,直到您可以將相關應用程序更改爲新列。一旦完成所有的轉換,然後刪除varchar列。 – HLGEM 2010-04-27 15:15:10
@HLGEM - 一個有趣的問題是「寫什麼?」。如果值爲Unicode,則可能無法轉換爲給定列的排序規則。 – Thomas 2010-04-27 15:24:53
你可能需要複製一些你可以和你現在的dat類似的東西。否則,其他應用程序會在轉換爲新列之前丟失所需的信息。這並不比目前的情況更糟糕,並且可能大部分記錄都是可讀的。如果這些數據有點奇怪,那麼只是讓遺留應用程序調整到使用新列的原因。 – HLGEM 2010-04-27 17:34:15