2011-07-01 49 views
3

我使用休眠和數據庫是sqlserver。 SQL Server將支持Unicode的數據類型與僅支持ASCII的數據類型區分開來。例如,支持Unicode的字符數據類型是nc​​har,nvarchar,longnvarchar,其中ASCII計數器部分分別是char,varchar和longvarchar。默認情況下,無論SQL Server中定義的相應列的數據類型是否支持Unicode,所有Microsoft的JDBC驅動程序都將Unicode格式的字符串發送到SQL Server。在列的數據類型支持Unicode的情況下,一切都很流暢。但是,如果列的數據類型不支持Unicode,則在數據提取期間會出現嚴重的性能問題。在進行比較之前,SQL Server會嘗試將表中的非Unicode數據類型轉換爲unicode數據類型。而且,如果索引存在於非Unicode列上,它將被忽略。這將最終導致數據獲取期間的整個表掃描,從而大大減緩搜索查詢速度。與休眠和MS SQL服務器性能很慢

我們使用的解決方案是,我們發現有一個屬性叫做sendStringParametersAsUnicode,它有助於擺脫這種unicode轉換。此屬性默認爲'true',這使得JDBC驅動程序默認將每個Unicode格式的字符串發送到數據庫。我們關掉了這個屬性。

我的問題是現在我們不能在unicode轉換中發送數據。在將來,如果varchar的db列被更改爲nvarchar(只有一列不是所有varchar列),現在我們應該以unicode格式發送字符串。

請建議我如何處理場景。

謝謝。

回答

0

Unicode是用於與SQL Server進行通信的本機字符串表示形式,如果要轉換爲MBCS(多字節字符集),則對每個字符串進行2次轉換。我建議,如果您關心的性能,使用的所有Unicode而不是所有MBCS

裁判:http://social.msdn.microsoft.com/Forums/en/sqldataaccess/thread/249c629f-b8f2-4a8a-91e8-aad0d83919ca

+0

嗨安娜塔夏爾馬,感謝您的回覆。如果您有任何其他鏈接或信息,該鏈接沒有任何內容。 – user755806

4

您需要指定屬性:sendStringParametersAsUnicode =在連接字符串URL錯誤。

jdbc:sqlserver://localhost:1433;databaseName=mydb;sendStringParametersAsUnicode=false