SQL Server 2005:需要有关在一个表列中处理多语言数据的建议

时间:2009-07-18 09:35:39

标签: sql-server localization collation

我正在运行SQL Server 2005和.Net 2.0。 我有一些表需要在同一列中以多种语言存储数据。 例如。 Article表,包含ArticleID(标识)和ArticleName(nvarchar 100) ArticleName中的数据可能是各种语言。

我的数据库正在使用SQL_Latin1_General_CP1_CI_AS的默认排序规则, 因为我们的大多数数据都是英文的。

我的应用程序中的每个用户都可以选择他/她的首选文化。 在用户界面中,文章数据显示在数据网格中,用户可以按ArticleName对它们进行排序。

现在,由于我的数据库排序规则,排序顺序不正确。 我正在考虑通过使用ORDER BY ... COLLATE子句来解决这个问题。 但是,如何将正确的用户文化映射到SQL Server排序规则? 我是否必须为每种文化指定,如下所示 - 例如。如果culture = zh-CN(中国中国),则使用排序规则Chinese_PRC_CI_AS 等等...

有没有更好的方法来获得整理? 我的方法是否正确?或者有更好的方法来处理这个问题吗? (我确实想过在.Net中实际执行排序,但这似乎浪费了CPU时间。) 谢谢你的阅读。

1 个答案:

答案 0 :(得分:2)

SQL Server 2005有一个fn_helpcollat​​ions()表函数,它返回所有支持的排序规则:

select *, 
COLLATIONPROPERTY(name, 'CodePage') as CodePage,
COLLATIONPROPERTY(name, 'LCID') as LCID,
COLLATIONPROPERTY(name, 'ComparisonStyle') as ComparisonStyle,
COLLATIONPROPERTY(name, 'Version') as Version
from fn_helpcollations()

MSDN article详细说明了SQL Server排序规则和状态:

  

但是,因为没有直接的   LCID和校对之间的映射,   你无法确定是否正确   来自LCID的整理。

     

如果您希望能够根据用户的区域设置ID自动为用户分配最佳排序顺序,那么这很不方便。

我建议您构建一个自定义表,将SQL排序规则映射到您为用户支持的语言,从此映射表中检索用户的排序规则,并按预期使用ORDER BY COLLATE。