你應該使用NVARCHAR任何時候你有存儲多個語言。我相信你必須將它用於亞洲語言,但不要引用它。
如果您以俄語爲例,並將其存儲在varchar中,則只要您定義了正確的代碼頁,就會出現問題。但是讓我們說你使用默認的英文SQL安裝,那麼俄文字符將不會被正確處理。如果你使用的是NVARCHAR(),它們將被正確處理。
編輯
好讓我引用MSDN和梅比我要具體,但你不想來存儲一個以上的代碼頁中varcar列,而你可以,你不應該
當您處理存儲在炭 文本數據,VARCHAR VARCHAR(最大值),或文本數據類型,考慮 的 最重要的限制是,從一個單一的 代碼頁唯一信息可以通過驗證 系統。 (您可以存儲來自 多個代碼頁的數據,但建議不使用 。)使用 驗證和存儲數據的確切代碼頁取決於列的歸類上的 。如果 列級別排序規則未定義爲 ,則使用數據庫 的排序規則。爲了確定代碼頁 一個用於給定列,你 可以使用COLLATIONPROPERTY 函數,如下面的 代碼示例:
這裏的一些:
這個例子說明了 許多語言環境(如格魯吉亞語和 印地語)沒有代碼頁,因爲它們的 是僅Unicode編碼。這些 排序規則是不適合使用的CHAR,VARCHAR或 文本數據類型
所以格魯吉亞或印地文真的需要被存儲爲nvarchar的 列。阿拉伯語也是一個問題:
您可能會遇到的另一個問題是 無法在不 所有要 支持字符都包含在代碼 頁面來存儲數據。在很多情況下,Windows認爲 的一個特定代碼頁是「最佳 合適」代碼頁,這意味着有 不能保證您可以依靠 代碼頁來處理所有文本;它是 只是最好的一個可用。這方面的一個例子 是阿拉伯文字: 它支持廣泛的語言陣列, 包括俾路支,柏柏爾,波斯語, 克什米爾,哈,吉爾吉斯,普什圖語, 信德語,維吾爾人,烏爾都語,等等。所有的 這些語言具有額外 字符超出阿拉伯文 語言作爲Windows代碼 頁1256定義。如果你試圖存儲在具有阿拉伯 整理,該字符的 非Unicode列 這些額外的字符被 轉換成問號。
當您使用Unicode時,請記住一些事項,儘管您可以在單個列中存儲不同的語言,但只能使用單個歸類進行排序。有些語言使用拉丁字符,但不能像其他拉丁語言那樣排序。口音就是一個很好的例子,我不記得這個例子,但是有一種東歐語言,其Y不像英語Y那樣排序。然後是西班牙語用戶在h之後排序。
總而言之,在處理內部化問題時必須處理所有問題。我認爲從一開始就使用Unicode字符比較容易,避免了額外的轉換並節省空間。因此我先前的發言。
>>當你在同一列有不同的語言....就是這樣! – 2009-11-09 09:56:37