【发布时间】:2011-03-27 06:41:52
【问题描述】:
你好,
我正在为欧洲语言和英语开发,字符串在 sql server 2005 中存储为 NVARCHAR。
那么,要使用的最佳排序规则是“Latin1_General_CI_AS”涵盖所有内容? 也有变化 Latin1_General_CP1_CI_AS、Latin1_General_BIN、Latin1_General_BIN2 等
cmets\建议赞赏。
问候 DEE
【问题讨论】:
你好,
我正在为欧洲语言和英语开发,字符串在 sql server 2005 中存储为 NVARCHAR。
那么,要使用的最佳排序规则是“Latin1_General_CI_AS”涵盖所有内容? 也有变化 Latin1_General_CP1_CI_AS、Latin1_General_BIN、Latin1_General_BIN2 等
cmets\建议赞赏。
问候 DEE
【问题讨论】:
对于通用排序,“General Latin1”可能是西欧和英语语言的最佳选择。
我相信如果未指定代码页(例如 CP1),则默认为代码页 1252(这也是 CP1 的含义)。所以我的理解是 Latin1_General_CI_AS 和 Latin1_General_CP1_CI_AS 是等价的。鉴于此,出于清晰的原因,我认为 Latin1_General_CP1_CI_AS 将是更好的选择。无论您使用CI_AS、CS_AS 还是CI_AI,这纯粹是一个可用性问题,具体取决于您是否需要区分大小写和/或区分重音。 CI、"a" == "A" 和 AI、"á" == "â"。
_BIN 和 _BIN2 选项表示排序规则将是基于代码点值的二进制。出于排序目的,您可能不希望这样做,因为该顺序不一定与任何类型的字典顺序匹配。但是,如果您只使用索引来搜索数据,那么其中之一可能是合适的,因为它可能更快。将字符值转换为关联的键值所需的计算量相对较少。
编辑 正如 Martin 在评论中指出的那样,除非您使用 char、memo 或 varchar,否则代码页无关紧要。如果您完全坚持使用 Unicode(nchar、nvarchar、nmemo),那么代码页将不会发挥作用。但是,如果您将 Unicode 字符转换为单字节字符,则会使用它。
【讨论】:
CHAR 表示而不是NVARCHAR。