2012-03-19 26 views
1

我們的Web應用程序在VARCHAR字段中存儲UTF-8編碼數據。最近,我們通過ODBC使用DataDirect的OpenAccess ODBC驅動程序爲我們的客戶提供了訪問這些數據的權限。這是通過使用DataDirect的OpenAccess SDK來實現的,它編寫了一個C#.Net類來與服務進行交互。我們只允許客戶執行SELECT查詢。此時我們還將結果限制爲100K行。使用鏈接服務器和ODBC的「不支持請求的轉換」

這個解決方案真的很好,除了用這些編碼數據查詢字段對用戶來說顯得是胡言亂語,可以理解。在我們服務的下一個版本中,我希望爲用戶提供使用未編碼字符串進行查詢的能力,並隨後查看未編碼的結果。

我已經通過UTF-8編碼傳入查詢解決了這個問題,然後通過標記VARCHAR字段返回未編碼結果爲WVARCHAR。這實際上工作得很好。不過,它確實意味着儘管存在(或缺少)Unicode字符,但每個VARCHAR列都會作爲WVARCHAR返回。

我們目前的很多客戶都採用了在自己的SQL Server實例中在SSMS中創建鏈接服務器的方法,這是我首選的連接方法。由於我們的服務將結果限制爲100K行,因此我鼓勵大家使用OPENQUERY來執行查詢。不過,似乎在SSMS中鏈接服務器的配置中缺少一些東西。當字符串函數(左,右,SUBSTRING例如)是針對這些WVARCHAR塔中進行,SSMS返回以下錯誤:

OLE DB provider "MSDASQL" for linked server "LOCAL" returned message "Requested conversion is not supported.". Msg 7341, Level 16, State 2, Line 1 Cannot get the current row value of column "[MSDASQL].ColName" from OLE DB provider "MSDASQL" for linked server "LOCAL".

這將被返回的查詢如此:

SELECT * 
FROM OPENQUERY([LOCAL], ' 
    SELECT LEFT(FirstName, 2) AS ColName 
    FROM dbo.User 
') 

如果我要從這個查詢中刪除LEFT函數,FirstName列將被返回,正確解碼,沒有錯誤。

此問題不會影響MS Excel等查詢。在表面上,當我調試通過與DataDirect產品接口的.Net類的方式時,字符串似乎受其各自函數的正確影響。我試圖更改鏈接服務器屬性上的所有服務器選項,但我找不到合適的組合。我只是在尋找合適的樹在這裏吠叫。是我對結果的處理,將它們改爲WVARCHAR?或者是我的SSMS鏈接服務器的一些屬性,我需要改變,我錯過了?

回答

1

在鏈接的服務器屬性上,將COLLATION COMPATIBLE設置爲TRUE,問題得到解決。

相關問題