2010-09-06 88 views
6

我在創建數據庫時對de默認排序規則有點困惑。存儲在數據庫中的數據將使用不同的語言。數據庫的主要用戶將使用西班牙語,但它也將用於英語,法語... 由於西班牙語默認排序規則是Modern_Spanish_CI_AS,而英語,法語意大利語......默認爲Latin1_General_CI_AS,因此我希望建議使用哪種排序規則,以及使用排序規則或其他規則時是否存在一些缺陷。多語言數據庫的最佳默認排序規則

非常感謝您的幫助 問候

哈維爾

+0

忘記提及我們使用的操作系統是西班牙語的窗口,如果校對決定取決於操作系統語言 – javier 2010-09-06 10:21:55

回答

5

排序規則有兩個作用:

  1. 對於非Unicode數據類型,它決定了數據的代碼頁,即它確定哪些字符可以存儲在列/變量中或不存在
  2. 對於所有數據類型,它會影響數據的排序和比較方式,即ORDER BY和等於

爲避免第一個問題出現問題,請始終使用nchar/nvarchar數據類型存儲和處理Unicode數據,因爲這樣您就不必擔心整理。它需要更多的磁盤空間,但它避免了一些非常尷尬的問題,所以對於大多數人來說,這可能是一個很好的折衷。

對於第二個問題,請使用對您的數據庫最有意義的排序規則,即哪種排序規則按大多數時候想要執行的方式排序和比較數據?例如,如果您知道區分大小寫的比較很重要,那麼Latin1_General_CS_AS可能是更好的選擇。

而且你可以隨時使用COLLATE明確指定的整理,如果您需要在特定查詢更多的控制:

create table #t (name nvarchar(100)) 

insert into #t select N'Che' 
insert into #t select N'Carlos' 
insert into #t select N'Cruz' 

select name from #t order by name collate Modern_Spanish_CI_AS 
select name from #t order by name collate Traditional_Spanish_CI_AS 

drop table #t 

如果你不知道文本數據如何排序或比較,如果你的用戶不要也不知道,那麼我會保持你的默認排序規則(並使用Unicode!);在最壞的情況下,您始終可以使用正確的歸類將數據移動到新表格。在聯機叢書中有很多關於排序規則的文檔,您應該仔細閱讀。

相關問題