我有一個名爲mydata的類型爲nvarchar(max)的字段的表。這包含字符如:éáñ。 使用Java(Spring)提取數據。 java應用程序使用utf-8來請求和響應。SQL Server函數返回 爲特殊字符utf-8
當我執行一個簡單的選擇特殊字符顯示正確。
Select myData from myTable
我有剛剛收到一個nvarchar的,並返回它簡單的SQL函數。
CREATE function getIt (@mydata nvarchar(max))
returns nvarchar(max)
as
begin
return @mydata;
end
當我使用一個函數將特殊字符不顯示,並用符號代替。
Select dbo.getIt(myData) as myData from myTable
我使用mySQL和Oracle測試了相同的進程,在這種情況下,SQL函數不會更改特殊字符。 我在Ubuntu Linux中使用Tomcat。數據庫是SQL Sever 2005.我正在使用JDTS 1.3。
謝謝你的幫助。
額外說明
如果該字段myData的包含如N,如果執行此:
Select
myData,
dbo.getIt(myData) as myData2
from myTable
在網頁中顯示的列的結果將是N?或ñ NVarchar存儲數據正確,但由於某種原因該函數改變了一些東西。 如果我遇到編碼問題,在兩種情況下都不會正確顯示。
您是否100%確定數據庫中的數據是正確的?你的輸出在哪裏?你究竟在哪裏看到'?'而不是那些特殊字符? – jlordo
@jlordo 100%確定數據庫中的數據是正確的,SQL Server Manager Studio在有和沒有函數的情況下正確顯示它。輸出是一個Web應用程序,我看到的是?取而代之的是,只有當數據被函數返回時,否則它在網頁中顯示OK。 – italo
你能否以某種方式縮小錯誤的根源?例如。在將值顯示在網頁上之前將其記錄下來:如果日誌中出現錯誤,則表明函數返回錯誤,如果日誌中正確,則Web應用程序會將其搞亂。但要小心實施正確的日誌記錄,以避免錯誤的否定。 – jlordo